我有一个比较Debian软件包的Python实用程序。 Python re模块有一个我认为涉及字符串' ++ ...'的正则表达式的错误。可能还有其他一些重复的角色。
此匹配失败
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中有没有办法进行字符串匹配或替换?
答案 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中解释。