我正在使用Python,我想使用正则表达式检查某些内容是否属于“包含列表”,但“不属于排除列表”。
我的包含列表由正则表达式表示,例如:
And.*
以和开头的所有内容。
排除列表也由正则表达式表示,例如:
(?!Andrea)
一切,但不是字符串 Andrea 。 排除列表显然是一种否定。
使用上面的两个例子,我想匹配以和开头的所有内容,除了 Andrea 。
在一般情况下,我有 includeRegEx 和 excludeRegEx 。我想匹配匹配 includeRegEx 但不匹配 excludeRegEx 的所有内容。 注意: excludeRegEx 仍为否定形式(正如您在上面的示例中所示),所以最好说:如果匹配 includeRegEx < / em>,我检查它是否也匹配 excludeRegEx ,如果匹配,则满足匹配。 是否可以在单个正则表达式中表示这一点?
我认为条件正则表达式可能是解决方案,但我并不确定。
我想在Python中看到一个有用的例子。
非常感谢。
答案 0 :(得分: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