在Python正则表达式中正斜杠

时间:2009-10-29 13:33:44

标签: python regex

我正在尝试使用Python正则表达式来查找字符串中的数学表达式。问题是正斜杠似乎做了一些意想不到的事情。我原以为[\w\d\s+-/*]*可以用于查找数学表达式,但由于某种原因,它也会找到逗号。一些实验表明,正斜杠是罪魁祸首。例如:

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

显然在字符之间使用正斜杠匹配(即使它在字符类中,但只有在存在星号时)。反斜杠不会逃脱它们。我已经找了一段时间而没有找到任何关于它的文件。有什么指针吗?

4 个答案:

答案 0 :(得分:21)

在Python的re模块上查看here for documentation

我认为它不是/,而是第一个字符类中的-[+-/]匹配+/和任何ASCII值之间,恰好包括逗号。

也许这些文档中的暗示有帮助:

  

如果要在集合中包含“]”或“ - ”,请在其前面加上反斜杠,或将其作为第一个字符。

答案 1 :(得分:7)

您说要用'a'替换或更多斜杠。所以它确实用'a'替换每个“无字符”。 :)

你可能意味着[/]+,即一个或多个斜杠。

编辑:阅读Ber's answer以获取原始问题的解决方案。我没有仔细阅读整个问题。

答案 2 :(得分:2)

r'[/] *'表示“匹配0或更多正斜杠”。 'b'和&之间正好有0个正斜线。 'c'和'c'和& 'D'。因此,这些匹配被替换为'a'。

答案 3 :(得分:2)

*将其参数与零或多次匹配,从而匹配空字符串。空字符串(逻辑上)在任意两个连续字符之间。因此

>>> import re
>>> re.sub(r'x*', 'a', 'bcd')
'abacada'

对于正斜杠,它没有受到特殊处理:

>>> re.sub(r'/', 'a', 'b/c/d')
'bacad'

documentation描述了Python中正则表达式的语法。如您所见,正斜杠没有特殊功能。

[\w\d\s+-/*]*也找到逗号的原因是因为在方括号内,短划线-表示范围。在这种情况下,您不希望+/之间的所有字符,而是字面字符+-/。因此,将短划线写为 last 字符:[\w\d\s+/*-]*。那应该解决它。