正则表达式匹配短语列表

时间:2016-05-20 13:49:00

标签: regex

我有一个以逗号分隔的短语列表,每个短语都以关键字开头,我希望匹配一组唯一关键字,但只希望每个关键字都出现一次。例如,我的一组短语可能看起来像" A-B-C或猫或小猫,A-B-D或狗或小狗,A-Q-C或猪或奶牛,A-B-C或胡萝卜或芹菜,Z-B-C或斑马或大象"。我希望结果集是

A-B-C或猫或小猫 A-B-D或狗或小狗 A-Q-C或猪或奶牛

我匹配以" A"开头的关键字但只希望每个关键字出现一次。所以这个短语以" Z-B-C"开头。不匹配,第二次" A-B-C"似乎应该被忽略。

我是一名正则表达式的新手并且一直试图在这里找到例子,但是找不到任何有用的东西。我现在的表达式是" A [^,] *"正确地拉出以" A"开头的短语但第二个例子是" A-B-C"也出现了。我可以用python或其他东西编写代码,但我需要在另一个具有正则表达式求值程序而不是外部程序的应用程序中执行此操作。谢谢!

1 个答案:

答案 0 :(得分:1)

/((A-.-.)(?!.*\2).*?),/g

https://regex101.com/r/tL0hP8/1

这将获取您在第二个捕获组中寻找的模式,而负向前瞻声明没有其他模式与之前的匹配,然后它会在下一个逗号之前接收其余的字符串并在其中捕获它第一次捕获组。请注意你不能只使用

/(A-.-.(?!.*A-.-.).*?),/g #wrong

因为它只匹配A-Q-C or pigs or cows.

有关捕获群组的更多信息:http://www.regular-expressions.info/refcapture.html

有关外观断言的更多信息:http://www.regular-expressions.info/lookaround.html