【发布时间】:2016-10-20 07:14:31
【问题描述】:
假设我有这样的字符串:
"DT NN IN NN""DT RB JJ NN""DT JJ JJ NN""DT RB RB NN NN""DT RB RB"
所以,我有一个字符串列表:
list = ["DT NN IN NN", "DT RB JJ NN", "DT JJ JJ NN", "DT RB RB NN NN", "DT RB RB"]
我有以下代码:
pattern = "(?:DT\s+)+([?:RB\s+|?:JJ\s+])+(?:NN\s+)*NN$"
for item in list:
m = re.match(pattern, item)
if m:
print item
我想从pattern 中匹配以DT 开头的字符串(出现一次或多次)有RB 或JJ(出现一次或多次),但不是两者都有,然后以NN 结尾(再次出现一次或多次)。
所以,在最终结果中,我应该在屏幕上打印出 3 和 4。但是,使用我的正则表达式,我还得到了 2,这是我不想要的。我如何更改 pattern 以便它可以工作?如何用 XOR 替换管道 (OR)?
【问题讨论】:
-
所以
NN可以重复任意次数? -
在这种情况下,不使用正则表达式会简单得多。
-
是的,
NN可以重复多次,但必须至少以一个NN结尾。 -
@Belphegor:
NN可以与例如JJ交错吗?DT JJ NN JJ NN是一个有效的字符串吗? -
@Belphegor:使用正则表达式进行自然语言模式处理? ;)
标签: python regex python-2.7