双加法的正则表达式问题(" ++")

时间:2014-08-01 21:29:54

标签: python regex

我有一个比较Debian软件包的Python实用程序。 Python re模块有一个我认为涉及字符串' ++ ...'的正则表达式的错误。可能还有其他一些重复的角色。

  • python 2.7.6
  • 系统中没有Python正则表达式模块

此匹配失败

re.match("libstdc++", "time  1.7-23build1")

此匹配成功(返回"无")

re.match("libstdc+", "time  1.7-23build1")

此匹配成功(返回"无")

re.match("libstdc+\+", "time  1.7-23build1")

我可以简单地跳转到BASH或perl来进行匹配,或者添加反斜杠,但是Python的解决方法呢......

问:在没有re或regex模块的情况下,Python中有没有办法进行字符串匹配或替换?

1 个答案:

答案 0 :(得分:3)

  
    问:在没有re或regex模块的情况下,Python中有没有办法进行字符串匹配或替换?

  

是。对于字符串匹配,请使用in(在字符串中的任意位置查找匹配项)或str.startswith(仅在开头查找匹配项):

In [5]: 'libstdc++' in 'time  1.7-23build1'
Out[5]: False

In [6]: 'time  1.7-23build1'.startswith('libstdc++')
Out[6]: False

In [8]: 'libstdc++' in "I really like libstdc++. It's cool."
Out[8]: True

要进行替换,请使用str.replace

In [10]: 'libstdc++ is awful'.replace('libstdc++', 'spinach')
Out[10]: 'spinach is awful'

还可以使用由文字字符组成的正则表达式。当然,人们需要逃避任何对re具有特殊含义的角色:

In [7]: bool(re.search(r'libstdc\+\+', 'time  1.7-23build1'))
Out[7]: False

In [8]: bool(re.search(r'libstdc\+\+',"Alas, poor libstdc++! I knew him, Horatio"))
Out[8]: True

对于正则表达式,请注意字符串开头的r和每个+之前的反斜杠。其中的每一个都在Python regular expression documentation中解释。