Regexp。如何匹配单词isn';t后面和前面有另一个字符
我想将代码中的Regexp。如何匹配单词isn';t后面和前面有另一个字符,regex,Regex,我想将代码中的mm单位替换为cm单位。对于大量此类替换,我使用regexp 我这样说: (?!a-zA-Z)mm(?!a-zA-Z) 但是它仍然匹配像summa、gamma和dummy这样的词 如何正确组成regexp?使用字符类并将第一个(?!…)前向更改为后向: (?<![a-zA-Z])mm(?![a-zA-Z]) ^^^^^^^^^^^^^ ^^^^^^^^^^^ (? 见 模式匹配: (?-如果当前位置左侧有ASCII字母,则会导致匹配失败的负查找 mm-文字子字符串
mm
单位替换为cm
单位。对于大量此类替换,我使用regexp
我这样说:
(?!a-zA-Z)mm(?!a-zA-Z)
但是它仍然匹配像summa
、gamma
和dummy
这样的词
如何正确组成regexp?使用字符类并将第一个
(?!…)
前向更改为后向:
(?<![a-zA-Z])mm(?![a-zA-Z])
^^^^^^^^^^^^^ ^^^^^^^^^^^
(?
见
模式匹配:
(?-如果当前位置左侧有ASCII字母,则会导致匹配失败的负查找
mm
-文字子字符串
(?![a-zA-Z])
-如果当前位置右侧有一个ASCII字母,则会导致匹配失败的负数
注意:如果您需要让您的模式支持Unicode,请将[a-zA-Z]
替换为[^\W\d\uu]
(如果您使用的是Python 2.x,请使用re.U
标志)。没有必要使用lookaheads和lookbehinds,因此如果您希望简化您的模式,您可以尝试类似的方法
\d+\s?(mm)\b
这确实假设你的毫米符号总是跟在一个数字后面,中间有一个可选的空格,我认为在这种情况下这是一个合理的假设
\b
检查单词边界,以确保mm
不是单词的一部分,例如伪
等
使用前向/后向而不是像\b[0-9+]\s?mm\b这样的东西是否有好处?