Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regexp。如何匹配单词isn';t后面和前面有另一个字符_Regex - Fatal编程技术网

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这样的东西是否有好处?