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

-3 投票
1 回答
509 浏览
提问于 2025-04-18 15:42

我有一个用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的 正则表达式文档 中都有解释。

撰写回答