条件正则表达式

4 投票
1 回答
2164 浏览
提问于 2025-04-15 22:09

我正在使用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

撰写回答