正则表达式:匹配所有,但忽略一个特定的单词

时间:2014-06-01 23:14:49

标签: regex

示例1字符串:

Aquaman Figure, XL DC Comics

示例2字符串:

Rocket Raccoon, Mini Marvel

正则表达式:

/(DC Comics|Marvel)/

匹配样本1:

DC Comics

匹配示例2:

Marvel

Regex101

中完美运作

如何扭转此问题?

我想仅匹配Aquaman Figure, XLRocket Raccoon, Mini

修改 /(.+)(?=Marvel)/似乎在做这项工作。它不包括Marvel来自Rocket Raccon!如何使这也适用于DC漫画?

2 个答案:

答案 0 :(得分:1)

/(.+)(?=Marvel)/(或两者都为/(.+)(?=DC Comics|Marvel)/)无法为以下内容工作:

John Marvel Bob

我认为你想要的结果是:

John  Bob

您只会在第一场比赛中获得John,并且您将在第二场比赛中获得Marvel Bob(因为预测并不会消耗掉所看到的内容)前面的人物)。

或者不包含任何字符串的内容(因为您要求下一个字符与某些给定字符匹配才能获得匹配)。


最简单的解决方案可能只是用空字符串替换两个所需的子字符串。替换:

DC Comics|Marvel

使用:

(empty string)

或者您可以反复搜索:

/(.*?)(DC Comics|Marvel|$)/

然后只提取第一个group(它将对应于匹配.*的内容,这是从最后一场比赛结束到之前的所有内容" DC Comics" ," Marvel"或字符串的结尾)。

需要使用reluctant quantifier ?来阻止.*John Marvel Bob匹配,而不仅仅是John中的John Marvel Bob Marvel

答案 1 :(得分:0)

re.findall(r"(.*)(?=Marvel|Comics)",input)

这正是你正在寻找的。它在python.input中将是你的字符串。