gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:25:18 24 4
gpt4 key购买 nike

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

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 = ['car manufacturer', 'popular']不知何故,“汽车”和“汽车制造商”之间的重叠似乎是这个问题的根源。
任何想法如何克服这个?
非常感谢

最佳答案

如果您先对 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com