正则表达式捕获模式的一个实例,但不捕获另一个实例。如何解决这个问题?

时间:2012-08-12 06:15:19

标签: python regex text

我有这段文字:

  

W / NNP是/ NNP获得/ NNP付费/ NNP for / IN Going / NNP到/ TO学院/ NNP!/。   检查/ NNP it / PRP out / RP here / RB!/。 http / NN:/:   //sldollar.notlong.com/JJ apple / NN iphone / NN TGIF / NNP猪/ NN流感/ NN

我目前正在使用此正则表达式来捕获一些感兴趣的区域:

[a-zA-Z]*/NN[PS]* [a-zA-Z]*/NN[PS]*

我正在使用RegexPal对此进行测试。

enter image description here

这会捕获TGIF/NNP swine/NN但不捕获swine/NN flu/NN。关于如何修复我的正则表达式来捕获它的任何建议?

2 个答案:

答案 0 :(得分:2)

如果其他人需要这个,我想答案是使用积极的前瞻:

([a-zA-Z]*/NN[PS]* )(?=([a-zA-Z]*/NN[PS]*))

答案 1 :(得分:0)

多个匹配不能重叠。

apple/NN iphone/NN TGIF/NNP swine/NN flu/NN
AAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBBBB
         CCCCCCCCCCCCCCCCCC DDDDDDDDDDDDDDD

上面标记为A和B的匹配相互跟随,但因为C片段在比赛A的中间开始(同样对于B中的D),所以它们不匹配。

您需要匹配一次,然后在上一个起点之后的某个时刻重新搜索,或者使用前瞻,这样后一部分就不会消耗。