Skip to main content
 首页 » 编程设计

python之如何使用 python re 模块在字符串中自动查找类似 'c++' 的模式

2025年05月04日20cmt

现在我有一个模式列表:

patterns = ['php', 'java', 'c++'] 

我想在另一个字符串中匹配它,比如 r'c++ primer'。 我想使用 python re 模块来完成它,但问题是,如果我使用:

for pattern in patterns: 
    re.findall(pattern, r'php php java java c++ c++') 

我会得到一个错误,因为“+”在正则表达式中有特殊含义。

那么在这种情况下,我该如何解决 c++ 或 c* 之类的问题呢?

请注意,我有很多模式需要匹配,所以我不想手动将 c++ 等所有内容转换为 c\+\+。

感谢您的关注。

请您参考如下方法:

使用字符类。在字符类之外 + a special meaning所以它不会按原样工作,你需要先转义它:r'c\+\+'。

>>> import re 
>>> re.findall(r'[+]{2}', r'c++ primer')  
['++'] 

更新 1:

如果您已经预定义了正则表达式,那么在这些模式上使用 re.escape:

>>> patterns = ['php', 'java', 'c++'] 
>>> for pattern in patterns: 
        print re.findall(re.escape(pattern), r'php php java java c++ c++') 
...      
['php', 'php'] 
['java', 'java'] 
['c++', 'c++'] 

更新 2:

>>> to_be_escaped = ('c++',)  #patterns that need to be escaped 
>>> new_patterns = [re.escape(p) if p in to_be_escaped else p for p in patterns] 
>>> for pattern in new_patterns: 
        print re.findall(pattern, r'php php java java c++ c++ .net') 
...      
['php', 'php'] 
['java', 'java'] 
['c++', 'c++'] 
['.net']