2

我有这段文字:

W/NNP Yes/NNP Get/NNP Paid/NNP for/IN Going/NNP to/TO College/NNP !/. 检查/NNP it/PRP out/RP here/RB !/. http/NN :/: //sldollar.notlong.com/JJ 苹果/NN iphone/NN TGIF/NNP 猪/NN 流感/NN

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

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

我正在使用RegexPal来测试它。

在此处输入图像描述

这捕获TGIF/NNP swine/NN但没有swine/NN flu/NN。有关如何修复我的正则表达式以捕获此问题的任何建议?

4

2 回答 2

2

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

([a-zA-Z]*/NN[PS]* )(?=([a-zA-Z]*/NN[PS]*))
于 2012-08-12T06:22:29.210 回答
0

多个匹配不能重叠。

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

上面标记为 A 和 B 的匹配项彼此跟随,但由于 C 块从匹配项 A 的中间开始(对于 B 中的 D 也是如此),它们不是匹配项。

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

于 2012-08-12T06:22:49.553 回答