【问题标题】:How to get list of patterns match in regex using str.contains?如何使用 str.contains 在正则表达式中获取模式匹配列表?
【发布时间】:2020-07-17 05:23:09
【问题描述】:

我有一个数据框df,它在Match_text 列中有一些文本。我使用正则表达式\b 边界条件将Match_textterms 匹配。我得到了预期的结果,但我还需要打印与df 匹配的模式。 在这种情况下,foobaz\b 匹配。我如何获得这些条款?

texts = ['foo abc', 'foobar xyz', 'xyz baz32', 'baz 45','fooz','bazzar','foo baz']
terms = ['foo','ball','baz','apple']
df = pd.DataFrame({'Match_text': texts})
pat = r'\b(?:{})\b'.format('|'.join(terms))
df[df['Match_text'].str.contains(pat)]

输出是

    Match_text
0   foo abc
3   baz 45
6   foo baz

除了这个输出,我还需要 foo, baz,foo

【问题讨论】:

  • 除了这个输出,我还需要foo, baz,foo
  • 我想你会希望foo baz 在最后一行,因为这两个词都是关键字。

标签: regex python-3.x pandas


【解决方案1】:

恕我直言有点冗长,让我知道它是否符合您的用例:

df['content'] = df[df['Match_text'].str.contains(pat)]
(df
 .dropna()
 .assign(temp = lambda x: x.content.str.split())
 .explode('temp')
 .reset_index()
 .assign(present=lambda x: x.loc[x.temp.isin(terms),'temp'])
 .dropna()
 .drop(['temp','content'],axis=1)
)

 index  Match_text  present
0   0   foo abc      foo
2   3   baz 45       baz
4   6   foo baz      foo
5   6   foo baz      baz

或者,您可以使用一些正则表达式:

   M = df.loc[df['Match_text'].str.contains(pat)]

#create pattern
p = re.compile(pat)

#search for pattern in the column
results = [p.findall(text) for text in M.Match_text.tolist()]

#assign results to a new column
M = M.assign(content = results)

M

        Match_text  content
0        foo abc    [foo]
3        baz 45     [baz]
6        foo baz    [foo, baz]

【讨论】:

    【解决方案2】:

    一种方法是在当前生成的数据框中添加一个新列,该列仅包含匹配的词,并删除所有其他不匹配的词:

    terms_regex = r'(?:{})'.format('|'.join(terms))
    df['Match_terms'] = re.sub(r'\s*\b(?!' + pat1 + r')\S+\b\s*', '', df['Match_text']
    

    这里要清楚,我用来删除不匹配单词的正则表达式是:

    \s*\b(?!(?:foo|ball|baz|apple))\S+\b\s*
    

    这将匹配不是您的关键字之一的任何术语,以及可选的周围空格,将其替换为空字符串。

    【讨论】:

      猜你喜欢
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 2016-07-18
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多