Python正则表达式匹配列表中的多个单词

标签 python regex

我有一个单词列表和一个字符串,并且想从原始列表中取回在字符串中找到的单词列表。

例如:

import re

lof_terms = ['car', 'car manufacturer', 'popular']
str_content = 'This is a very popular car manufacturer.'

pattern = re.compile(r"(?=(\b" + r"\b|".join(map(re.escape, lof_terms)) + r"\b))")
found_terms = re.findall(pattern, str_content)

这只会返回 ['car', 'popular']。它未能捕获“汽车制造商”。但是,如果我将术语源列表更改为 lof_terms = ['汽车制造商', '流行']

不知何故,“汽车”和“汽车制造商”之间的重叠似乎是此问题的根源。

有什么办法可以克服这个问题吗?

非常感谢

最佳答案

如果您首先按长度降序对 lof_terms 进行排序,则可以修复当前代码:

rx = r"(?=\b({})\b)".format("|".join(map(re.escape, sorted(lof_terms, key=len, reverse=True))))
pattern = re.compile(rx)

请注意,在这种情况下,\b 字边界仅在分组的任一端使用一次,无需在每个替代项周围重复它们。请参阅this regex demo .

请参阅Python demo :

import re

lof_terms = ['car', 'car manufacturer', 'popular']
str_content = 'This is a very popular car manufacturer.'

rx = r"(?=\b({})\b)".format("|".join(map(re.escape, sorted(lof_terms, key=len, reverse=True))))
pattern = re.compile(rx)
found_terms = re.findall(pattern, str_content)
print(found_terms)
# => ['popular', 'car manufacturer']

关于Python正则表达式匹配列表中的多个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65290426/

相关文章:

python - 编写 Python RegEx 以选择 HTML 中列表项的子集

javascript - 改进我可怕的 switch 正则表达式匹配语句

javascript - 在javascript中,有没有办法区分字母和其他字符?

php - 将 .po 文件导出为 .csv

JavaScript - 在字符串中搜索模式

python - Linux:Conda 无法安装 Anaconda

python - 为什么我的 python 多处理脚本在 Windows 上运行而不在 Linux 上运行?

python - 如何在pygame中创建冷却功能?

python isinstance vs hasattr vs try/except : What is better?

android - 用于查找和替换的正则表达式未在 Android Studio IDE 中转义撇号