我想在代码中将mm
单位替换为cm
单位。在大量此类替换的情况下,我使用regexp
。
我做了这样的表达:
(?!a-zA-Z)mm(?!a-zA-Z)
但它仍匹配summa
,gamma
和dummy
等字词。
如何正确组成正则表达式?
答案 0 :(得分:4)
使用字符类并将第一个(?!...)
前瞻更改为lookbehind:
(?<![a-zA-Z])mm(?![a-zA-Z])
^^^^^^^^^^^^^ ^^^^^^^^^^^
请参阅regex demo
模式匹配:
(?<![a-zA-Z])
- 如果当前位置的 left 有一个ASCII字母,那么匹配失败的后置 mm
- 文字子字符串(?![a-zA-Z])
- 如果当前位置的右侧有一个ASCII字母,那么匹配失败前瞻 注意:如果您需要使模式支持Unicode,请将[a-zA-Z]
替换为[^\W\d_]
(如果您使用的是Python,则使用re.U
标志.X)。
答案 1 :(得分:2)
没有必要使用前瞻和外观,所以如果你想简化你的模式,你可以尝试这样的事情;
\d+\s?(mm)\b
这确实假设您的毫米符号将始终跟随一个数字,中间有一个可选空格,我认为在这种情况下这是一个合理的假设。
\b
检查字边界,以确保mm
不属于dummy
等单词的一部分。