Python正则表达式:一个或多个字符串出现

时间:2016-06-15 09:04:24

标签: python regex python-2.7

假设我有这样的字符串:

  1. "DT NN IN NN"
  2. "NN IN NN"
  3. "NN NN IN NN"
  4. "NN IN NN NN NN"
  5. "NN NN IN NN NN"
  6. "CD NN IN CD NN"
  7. "NN IN NN DT"
  8. 基本上我有一个字符串列表:

    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 NNNN IN NN NN NN,但不打印其他内容。

    知道如何解决这个问题吗?

1 个答案:

答案 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任意次。