快速Python正则表达式问题:匹配否定的字符集

时间:2011-01-26 22:36:32

标签: python regex

我想找到与特定字符序列不匹配的字符串。例如:

类似

REGEX = r'[^XY]*'

我想查找具有任意数量字符的字符串,除了X和Y彼此相邻...上面的REGEX不起作用,因为它分别阻止X和Y.

2 个答案:

答案 0 :(得分:2)

怎么样:

if "XY" not in s:
   print "matched"
else
   print "not matched"

或者这是否包含在更长的正则表达式中?那么也许你想要一个负面的超前表达:

REGEXP="...(?!XY)..."

编辑:修正错误

答案 1 :(得分:1)

有几种方法可以做到这一点。

^(?!.*XY).*$

超前表达式尝试匹配字符串中任何位置的XY序列。这是否定预测,因此如果找到一个,则匹配尝试失败。否则,.*继续并消耗整个字符串。

^(?:(?!XY).)*$

这个重复匹配任何字符(.),但只有在先行确认该字符不是XY序列的开头之后。

^(?:[^X]+|X(?!Y))*$

重复匹配X以外的任何字符中的一个或多个字符,如果X后面没有Y,则重复匹配。

使用前两个正则表达式,如果它们可能是源字符串中的换行符,则必须应用DOT_ALL修饰符。第三个不需要,因为它使用了否定的字符类 - [^X] - 而不是点。