Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式中的正斜杠_Python_Regex - Fatal编程技术网

Python正则表达式中的正斜杠

Python正则表达式中的正斜杠,python,regex,Python,Regex,我尝试使用Python正则表达式在字符串中查找数学表达式。问题是正斜杠似乎做了一些意想不到的事情。我本以为[\w\d\s+-/*]*可以找到数学表达式,但出于某种原因,它也会找到逗号。一点实验表明,正斜杠是罪魁祸首。例如: >>> import re >>> re.sub(r'[/]*', 'a', 'bcd') 'abacada' 显然,正斜杠在字符之间匹配(即使是在字符类中,尽管只有在星号出现时)。背后的割伤无法逃脱它们。我搜寻了一段时间,没有找到任何关

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

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

显然,正斜杠在字符之间匹配(即使是在字符类中,尽管只有在星号出现时)。背后的割伤无法逃脱它们。我搜寻了一段时间,没有找到任何关于它的文档。有什么指针吗?

你说的是用
'a'
替换零个或多个斜杠。因此,它确实将每个“无字符”替换为
'a'
:)

您可能指的是
[/]+
,即一个或多个斜杠


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

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+/*-]*
。看看Python的
re
模块

我认为这不是
/
,而是您的第一个字符类中的
-
[+-/]
匹配
+
/
和两者之间的任何ASCII值,它们碰巧包含逗号

可能来自文档帮助的提示是:

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


RTFM不是一个可接受的答案。其他答案是正确的。