【发布时间】:2017-10-26 21:56:42
【问题描述】:
我刚刚了解到 [^ab] 将捕获除 a 或 b 之外的任何字符。 所以 [^ab]* 应该匹配 0 个或多个字符,其中没有一个是 a 或 b。
然而,python 以某种方式将 [^ab]* 匹配到 a。
pattern = '[^ab]*'
str = 'a'
r = re.compile(pattern)
m = r.match(str)
if m is None:
print 'No match'
else:
print 'match'
此代码 sn-p 打印匹配项。我相信要么我理解错误 ^ 的用法,要么在代码中犯了一些错误
【问题讨论】:
-
匹配0个字符,都不是a或b。
-
困扰你的是
*,而不是^。 -
您可能会想到
fullmatch的语义而不是match。 -
@user3828311:它不匹配
a。它与您的字符串的空前导子字符串匹配。 -
OP,也许您的意思是使用
[^ab][^ab]*或^[^ab]*$(毫无疑问还有其他可能性)。对于某些正则表达式实现,您可以说[^ab]+表示 1 或更多;我不记得 Python 正则表达式是否能识别这一点。