条件正则表达式
我正在使用Python,想用正则表达式来检查某个东西“是否在包含列表中”,但“不在排除列表中”。
我的包含列表是用正则表达式表示的,比如:
And.*
所有以And开头的内容。
同样,排除列表也是用正则表达式表示的,比如:
(?!Andrea)
所有内容,但不包括字符串Andrea。排除列表显然是一个否定。
根据上面的两个例子,我想匹配所有以And开头的内容,除了Andrea。
一般来说,我有一个includeRegEx和一个excludeRegEx。我想匹配所有符合includeRegEx的内容,但不符合excludeRegEx。注意:excludeRegEx仍然是负面的(就像上面的例子所示),所以更准确地说:如果某个东西符合includeRegEx,我会检查它是否也符合excludeRegEx,如果符合,那么匹配就成立。有没有可能用一个正则表达式来表示这个?
我觉得条件正则表达式可能是解决方案,但我不太确定。
我想看看在Python中一个可行的例子。
非常感谢。
1 个回答
2
为什么不把两个放在一个正则表达式里呢?
And(?!rea$).*
因为前瞻只是在“往前看”,并不会消耗任何字符,所以这样做是完全可以的(其实,这就是前后查找的主要目的)。
所以,在Python中:
if re.match(r"And(?!rea$).*", subject):
# Successful match
# Note that re.match always anchor the match
# to the start of the string.
else:
# Match attempt failed
从你提问的方式来看,我不太确定你是否已经有了两个完成的“匹配/不匹配”列表。如果是这样的话,你可以通过简单地把正则表达式连接起来,自动合并它们。这种方法也能正常工作,但看起来会比较复杂:
(?!Andrea$)And.*
一般来说:
(?!excludeRegex$)includeRegex