条件正则表达式

时间:2010-04-29 14:56:47

标签: python regex conditional

我正在使用Python,我想使用正则表达式检查某些内容是否属于“包含列表”,但“不属于排除列表”。

我的包含列表由正则表达式表示,例如:

And.*

开头的所有内容。

排除列表也由正则表达式表示,例如:

(?!Andrea)

一切,但不是字符串 Andrea 排除列表显然是一种否定。

使用上面的两个例子,我想匹配以开头的所有内容,除了 Andrea

在一般情况下,我有 includeRegEx excludeRegEx 。我想匹配匹配 includeRegEx 但不匹配 excludeRegEx 的所有内容。 注意 excludeRegEx 仍为否定形式(正如您在上面的示例中所示),所以最好说:如果匹配 includeRegEx < / em>,我检查它是否也匹配 excludeRegEx ,如果匹配,则满足匹配。 是否可以在单个正则表达式中表示这一点?

我认为条件正则表达式可能是解决方案,但我并不确定。

我想在Python中看到一个有用的例子。

非常感谢。

1 个答案:

答案 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