Python正则中的斜杠

28 投票
4 回答
81847 浏览
提问于 2025-04-15 15:29

我正在尝试用Python的正则表达式在一个字符串中找到数学表达式。问题是,正斜杠似乎有些意外的效果。我本以为 [\w\d\s+-/*]* 可以用来找到数学表达式,但不知道为什么它也找到了逗号。经过一些实验,我发现正斜杠是问题所在。例如:

>>> import re
>>> re.sub(r'[/]*', 'a', 'bcd')
'abacada'

显然,正斜杠在字符之间匹配(即使它在字符类中,只有在星号存在时才会这样)。而反斜杠并不能让它失效。我找了很久也没找到相关的文档。有没有什么建议?

4 个回答

4

r'[/]*' 的意思是“匹配0个或多个正斜杠”。在'b'和'c'之间,以及'c'和'd'之间,正好有0个正斜杠。所以,这些匹配的部分会被替换成'a'。

9

你说的是把零个或多个斜杠替换成'a'。所以确实是把每个“没有字符”的地方都替换成'a'。:)

你可能想说的是[/]+,也就是一个或多个斜杠。

编辑:可以看看Ber的回答,里面有解决原问题的方法。我没有仔细读完整个问题。

36

你可以在这里查看关于Python的re模块的文档

我觉得问题不在于/,而是你第一个字符类里的-[+-/]可以匹配+/以及它们之间的任何ASCII值,而这些值恰好包括了逗号。

也许文档中的这个提示对你有帮助:

如果你想在一个集合中包含]-,可以在前面加一个反斜杠,或者把它放在第一个字符的位置。

撰写回答