gpt4 book ai didi

python - 使用 re.findall() 匹配包含特殊字符的术语?

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

使用 re.findall(),我尝试从字符串中的术语列表中查找每个术语的所有出现情况。

如果特定术语包含特殊字符(即“+”),则不会找到匹配项,或者可能会生成错误消息。使用re.escape(),可以避免错误消息,但在字符串中找不到带有特殊字符的术语。

import re         
my_list = ['java', 'c++', 'c#', '.net']
my_string = ' python javascript c++ c++ c# .net java .net'
matches = []

for term in my_list:
if any(x in term for x in ['+', '#', '.']):
term = re.escape(term)

print "\nlooking for term '%s'" % term
match = re.findall("\\b" + term + "\\b", my_string, flags = re.IGNORECASE)
matches.append(match)

上面的代码只会在字符串中查找“java”。关于如何查找字符串中带有特殊字符的术语有什么建议吗?

警告:我无法手动更改“my_list”,因为我事先不知道它将包含哪些术语。

更新 - 看来问题与正则表达式中的单词边界说明符(“\b”)有关,该说明符沿着字符分解字符串,其中包括字符串。然而,目前还不清楚如何以干净、直接的方式解决这个问题。

编辑 - 此问题与 this 不重复- 它已经包含了该帖子中最适用的解决方案。

最佳答案

import re
my_list = ['java', 'c++', 'c#', '.net']
my_string = ' python javascript c++ c++ c# .net java .net'
matches = []

for term in my_list:
if any(x in term for x in ['+', '#', '.']):
term = re.escape(term)

print "\nlooking for term '%s'" % term
match = re.findall(r"(?:^|(?<=\s))"+term+r"(?=\s|$)", my_string, flags = re.IGNORECASE)
matches.append(match)

试试这个。问题是 \b 这是单词边界。在 C++ 中,+ 之后没有单词边界。所以它会不匹配。其他人也类似。

关于python - 使用 re.findall() 匹配包含特殊字符的术语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30242709/

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