Python:正则表达式搜索特殊字符在搜索多个字符时出错

时间:2017-06-08 09:50:10

标签: regex python-3.x search

我正在使用包的findall()函数进行简单的正则表达式字符串搜索。 在使用负面场景进行我的单元测试时,我发现一些特殊字符返回错误代码,这些代码在#符号后面的注释中给出。 我的问题是为什么这些字符返回错误代码,如何用带有转义序列的搜索字符串替换它们? 请告诉我替换转义序列的代码:

import re
search="database"
search="c++" # error: multiple repeat
search="c\+\+" #working
search="c+"  #working
search="c#" #working
search="j!!" #working
search="x$$" #working
search="++j" #error: nothing to repeat
search="~~c" #working
search="c@@" #working
search="j##" #working
search="c%%"  #working
search="j&&"  #working
search="j**" #error: multiple repeat
search="j*"  #* is wild card
search="c(github)" #working
search="c--" #working
search="c==" #working
document="i did c++ programming. I am a c++ programming enthusiast. I love 
working on c++ algirithms. I have experience in 3.5 years of c++ programming 
skills "
n=len(re.findall(search,document))
print("Keyword Frequency: ",search ," Count:  ",n)

为了便于理解,针对每个搜索词给出了代码print()的最后一个语句的输出。 解决方案我需要具备的能力:

  1. 识别特殊字符序列。 (例如,它可能是:++或+++或+++++或" ++ j"或" j **" etc

  2. 在识别出特殊字符序列后,解决方案代码应该用" ++"替换特殊字符。或" +++"或" +++++"或者" ++ j"或" j **"

  3. 创建新的搜索字符串

  4. 提前感谢您的解决方案。

1 个答案:

答案 0 :(得分:1)

正则表达式模块附带了一个函数:re.escape()。所以:

import re

search = "c++"
# ...
document = """i did c++ programming. I am a c++ programming enthusiast. I love 
working on c++ algirithms. I have experience in 3.5 years of c++ programming 
skills """
n = len(re.findall(re.escape(search), document))
print("Keyword Frequency: ", search, " Count:  ", n)

应该做得很好......现在,为什么你使用正则表达式而不是str.count()这么简单的任务是你需要自己回答的问题。