繁体   English   中英

在Python正则表达式中正斜杠

[英]Forward slash in a Python regex

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

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

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

在这里查看 Python的re模块的文档

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

也许这些来自文档的提示有助于:

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

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

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

编辑:阅读Ber的解决原始问题的答案 我没有仔细阅读整个问题。

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

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

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

至于正斜杠,它没有得到特殊处理:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM