假设我有这样的字符串:
"DT NN IN NN"
"NN IN NN"
"NN NN IN NN"
"NN IN NN NN NN"
"NN NN IN NN NN"
"CD NN IN CD NN"
"NN IN NN DT"
基本上我有一个字符串列表:
list = ["DT NN IN NN", "NN IN NN", "NN NN IN NN", "NN IN NN NN NN", "NN NN IN NN NN", "CD NN IN CD NN", "NN IN NN DT"]
假设我想匹配开始并拥有一个或多个NN
的模式,然后是IN
,然后是一个或多个NN
(或(NN+) (IN) (NN+)
) 。这意味着如果我想要这些匹配,我将在字符串2到5上获得正面命中,在1,6和7上获得负数(它需要以NN结束)。
我尝试过的其中一件事是re
:
pattern = "(NN+) (IN) (NN+)"
for item in list:
m = re.match(pattern, item)
if m:
print item
但这仅打印NN IN NN
和NN IN NN NN NN
,但不打印其他内容。
知道如何解决这个问题吗?
答案 0 :(得分:1)
我认为这会起作用
^((?:NN\s+)+)IN\s+NN
以NN结尾,请使用:
^(?:NN\s+)+IN\s+(?:NN\s+)*NN$
<强> Regex Demo 强>
在你的正则表达式
(NN+) (IN) (NN+)
第一个N
匹配N
字面上,N+
匹配一个或多个N
。
简单来说,它匹配N
后跟N
一次或多次,而您想要匹配NN
任意次。