首页 > 解决方案 > 如何使用 str.contains 在正则表达式中获取模式匹配列表?

问题描述

我有一个数据框df,在 column 中有一些文本Match_text。我正在匹配Match_text使用terms正则表达式\b边界条件。我得到了我的预期结果,但我还需要打印与df. 在这种情况下,foo和 与baz匹配\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

标签: regexpython-3.xpandas

解决方案


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

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*

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


推荐阅读