我希望找到不匹配特定字符序列的字符串。例如:
像这样的东西
像这样的东西
REGEX = r'[^XY]*'
我想查找除了相邻的X和Y之外,任意数量字符的字符串...上面的正则表达式无法工作,因为它分别阻止了X和Y。
REGEX = r'[^XY]*'
我想查找除了相邻的X和Y之外,任意数量字符的字符串...上面的正则表达式无法工作,因为它分别阻止了X和Y。
if "XY" not in s:
print "matched"
else
print "not matched"
还是你需要将其包含在某个更长的正则表达式中?那么也许你需要一个负向前瞻表达式:
REGEXP="...(?!XY)..."
编辑:修正了拼写错误
有几种方法可以做到这一点。
^(?!.*XY).*$
前瞻表达式尝试在字符串中的任何位置匹配XY
序列。这是一个负面前瞻,因此如果找到一个,匹配尝试失败。否则,.*
继续消耗整个字符串。
^(?:(?!XY).)*$
这个正则表达式会重复匹配任何字符 (.
),但只有在前瞻确认该字符不是 XY
序列的开头后才会匹配。
^(?:[^X]+|X(?!Y))*$
重复匹配除了X
之外的一个或多个任意字符,或者如果X
后面不跟着Y
,则匹配X
。
对于前两个正则表达式,如果源字符串中可能有换行符,则必须应用DOT_ALL修饰符。第三个正则表达式不需要这样做,因为它使用了否定字符类-[^X]
,而不是点号。