我想说
1 ABC Street
1 A ABC Street
Run Code Online (Sandbox Code Playgroud)
有\d,它匹配1(我期望的),与1\d \w匹配(预期).现在我将模式组合在一起,它只匹配第一个,但忽略第二个.\d|\d \w
我的问题是如何在这种特殊情况下正确使用或调节?
PS:条件是仅在此后没有单个字母时包装数字,否则包装数字和单个字母.
例如:1 ABC街比赛只有1号,但是当1 ABC街包裹1 A时
Mik*_*keM 60
尝试
\d \w |\d
Run Code Online (Sandbox Code Playgroud)
如果您不想在匹配中包含尾随空格,请添加正向前瞻
\d \w(?= )|\d
Run Code Online (Sandbox Code Playgroud)
当你有两个选择,其中一个是另一个的扩展时,先把较长的一个放在第一个,否则就没有机会匹配.
Mar*_*rio 27
经典的"或"将是|.例如,ab|de将匹配表达式的任一侧.
但是,对于类似你的情况,你可能想要使用?量词,它将前一个表达式精确匹配0或1次(首选1次;即它是"贪婪"匹配).另一种(可能更可靠的)替代方案是使用自定义字符组:
\d+\s+[A-Z\s]+\s+[A-Z][A-Za-z]+
Run Code Online (Sandbox Code Playgroud)
此模式将匹配:
\d+:一个或多个数字.\s+:一个或多个空格.[A-Z\s]+:一个或多个大写字符或空格字符\s+:一个或多个空格.[A-Z][A-Za-z\s]+:大写字符后跟至少一个字符(大写或小写)或空格.如果您想更静态检查,如确实只匹配ABC和A ABC,那么你就可以结合(不匹配)组,定义里面的替代品(限制范围):
\d (?:ABC|A ABC) Street
Run Code Online (Sandbox Code Playgroud)
或者使用量词的另一种选择:
\d (?:A )?ABC Street
Run Code Online (Sandbox Code Playgroud)
Ron*_*ael 16
我认为你需要的可能是简单的:
\d( \w)?
Run Code Online (Sandbox Code Playgroud)
请注意,如果将其写成\d \w|\d代替,那么正则表达式也会起作用\d|\d \w.
这是因为在你的情况下,一旦正则表达式匹配第一个选项\d,它就会停止搜索新的匹配,可以这么说.