gpt4 book ai didi

python - 正则表达式重叠包含

转载 作者:太空宇宙 更新时间:2023-11-03 21:23:55 26 4
gpt4 key购买 nike

假设我想在字符串中搜索一堆标签,其中一些标签可以是其他标签的子字符串。例如,我想在文本“He 去年参加了加州大学伯克利分校”中搜索标签 [“UC”、“加州大学伯克利分校”、“伯克利分校”]。我希望所有三个标签都能显示出来。然而,当我在 Python 中运行它时,我只得到“UC”和“Berkeley”:

import re
string = "He attended UC Berkeley last year."
compiled_regexp = re.compile("UC|UC Berkeley|Berkeley", re.IGNORECASE)

re.findall(compiled_regexp, string)
# result is: ['UC', 'Berkeley']

如何才能显示所有三个标签?

<小时/>

我的实际用例涉及数以万计的标签,其中许多是其他标签的前缀。还有一些标签是其他标签的前缀,而这些标签本身也是其他标签的前缀等等(例如 [“UC”、“UCB”、“UCBA”...]) 手动为所有标签创建捕获组是不可行的其他标签的前缀。有更好的方法吗?

<小时/>

更新:
我决定执行以下操作:
首先,我找到所有作为其他标签前缀的标签。然后我构建两个单独的正则表达式,一个用于前缀标签,另一个用于非前缀标签。最后,我使用两个正则表达式搜索字符串并合并结果。

最佳答案

少量目标字符串的解决方案

如果您只有几个目标字符串,那么手动构建正则表达式模式并执行搜索仍然可行,如下所示:

import re
string = "He attended UC Berkeley last year."
compiled_regexp = re.compile(r"((UC) (Berkeley)|UC|Berkeley)", re.IGNORECASE)

matches = re.findall(compiled_regexp, string)
print(matches)

给出输出:

[('UC Berkeley', 'UC', 'Berkeley')]

有关此正则表达式模式的更多说明,请参阅 regex101 .

通用解决方案

我不知道有什么简单的方法可以使用正则表达式来搜索大量重叠的相同起始位置目标字符串(看起来 regex just isn't really designed for this scenario )。但是,只要您的目标字符串是固定的,列表理解就应该能够完成这项工作:

string = "He attended UC Berkeley last year."
targets = ["UC Berkeley", "UC", "Berkeley"]
string_lower = string.lower()
found = [target for target in targets if target.lower() in string_lower]
print(found)

输出为:

['UC Berkeley', 'UC', 'Berkeley']

关于python - 正则表达式重叠包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53998762/

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