正则表达式双加号("++")问题
我有一个用Python写的工具,它可以比较Debian软件包。我觉得Python的re模块在处理包含字符串'++...'的正则表达式时有个bug,可能还有其他一些重复字符也有问题。
- 使用的Python版本是2.7.6
- 系统上没有安装Python的正则表达式模块
这个匹配失败了
re.match("libstdc++", "time 1.7-23build1")
这个匹配成功了(返回“none”)
re.match("libstdc+", "time 1.7-23build1")
这个匹配也成功了(返回“none”)
re.match("libstdc+\+", "time 1.7-23build1")
我可以暂时用BASH或perl来进行匹配,或者加上反斜杠,但我想知道有没有Python的解决办法...
问:有没有办法在Python中进行字符串匹配或替换,而不使用re或正则表达式模块?
1 个回答
4
问:在Python中有没有办法进行字符串匹配或替换,而不使用re或regex模块?
当然可以。要进行字符串匹配,可以使用 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的 正则表达式文档 中都有解释。