正则表达式(?<= \ s)\ d(?= \ s)和(?<!-\ S)\ d(?!\ S)之间有什么区别

时间:2018-12-19 22:13:18

标签: python regex python-3.x

为什么是表达式

(?<=\s)\d(?=\s)

与表达式不同

(?<!\S)\d(?!\S)

2 个答案:

答案 0 :(得分:2)

一个区别是,正向后向查找和向前查找要求查找要存在的那些字符,而负向查找则不需要。例如

1 2

将有2个匹配项

(?<!\S)\d(?!\S)

但没有匹配项

(?<=\s)\d(?=\s)

https://regex101.com/r/tjYc1o/1

(?=\s)要求数字后跟一个空格字符,因此如果该数字位于字符串的末尾,则该数字将不匹配,但是如果使用(?!\S),则该负数将不匹配提前行将通过,因为字符串末尾的数字后面没有非空格字符。

答案 1 :(得分:0)

 #Why is the expression
 (?<= \s )
 \d
 (?= \s )

 #not the same as the expression
 (?<! \S )
 \d
 (?! \S )

当您在否定类上使用否定断言时,它也会匹配
在BOS和EOS位置,而肯定的断言则不会。