regex - 如何使用 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
解决方案
一种方法是在当前生成的数据框中添加一个新列,该列仅包含匹配的术语,并删除所有其他不匹配的单词:
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*
这将匹配任何不是您的关键字之一的术语,以及可选的周围空格,并将其替换为空字符串。
推荐阅读
- c# - 根据给定的整数生成连续的 IPv4 地址
- python - 如何在 python 反应计时器中停止“输入垃圾邮件”
- python - 无法识别和操纵本网站的“弹出”建议好吗?
- xml - ODK 创建测试 - 我可以随机排序吗?
- vega-lite - 日期解析以及何时在 Vega Lite 中使用 utc/TimeUnits?
- java - 无法从 Eclipse springboot 应用程序访问 localhost:8080
- r - 解释类似(但不同)指定线性回归模型的标准误差:R
- math - 将直线的起点和终点修剪到它们进入/退出矩形的位置?
- vba - 使用 VBA 访问 Access 中的 ImportTextFile
- ansible - 如何在单个操作中检查所有主机的状况并通过/失败运行