快速Python正则表达式问题:匹配否定字符集
我想查找与特定字符序列不匹配的字符串。例如: 差不多快速Python正则表达式问题:匹配否定字符集,python,regex,Python,Regex,我想查找与特定字符序列不匹配的字符串。例如: 差不多 REGEX = r'[^XY]*' 我想查找除相邻的X和Y之外的任意字符数的字符串…上面的正则表达式不起作用,因为它分别阻止X和Y。怎么样: if "XY" not in s: print "matched" else print "not matched" 或者这是为了包含在更长的regexp中?那么,您可能需要一个负的前瞻表达式: REGEXP="...(?!XY)..." 编辑:修复打字错误有几种方法可以做到这一点 ^
REGEX = r'[^XY]*'
我想查找除相邻的X和Y之外的任意字符数的字符串…上面的正则表达式不起作用,因为它分别阻止X和Y。怎么样:
if "XY" not in s:
print "matched"
else
print "not matched"
或者这是为了包含在更长的regexp中?那么,您可能需要一个负的前瞻表达式:
REGEXP="...(?!XY)..."
编辑:修复打字错误有几种方法可以做到这一点
^(?!.*XY).*$
前瞻表达式尝试匹配字符串中任意位置的XY
序列。这是一个消极的前瞻,因此如果它找到一个,匹配尝试将失败。否则,*
将继续并使用整个字符串
^(?:(?!XY).)*$
该字符重复匹配任何字符(
),但仅在先行检查确认该字符不是XY
序列的开头之后
^(?:[^X]+|X(?!Y))*$
重复匹配除X
或X
之外的任何字符中的一个或多个,如果后面没有Y
对于前两个正则表达式,如果它们可能是源字符串中的换行符,则必须应用DOT_ALL修饰符。第三个不需要它,因为它使用了一个否定的字符类-
[^X]
,而不是一个点。我对python正则表达式不太了解,但您所拥有的应该可以工作。或者试着用+
替换*
,我刚刚检查了at,它似乎工作正常。你能给我们一个字符串来测试它吗?我也不知道你分别阻止Xs和Ys是什么意思。这个正则表达式将忽略Xs和Ys…你能不能不只是将有XY的字符串匹配在一起,然后对没有XY的字符串做任何你想做的事情?你的问题是不明确的。“XY”不是您想要的字符串吗?我想您在第一行有一个额外的not
。