1

我正在关注有关正则表达式的教程。执行以下操作时出现错误:

regex = r'(+|-)?\d*\.?\d*'  

显然,Python 不喜欢 (+|-)。可能是什么问题呢?
另外,在正则表达式之前不添加 r 可能会出现什么问题?

4

2 回答 2

3

+是一个特殊字符。您可以使用方括号来指定字符范围,这比在这种情况下使用带有管道字符的“或”更好:

regex = r'([+-])?\d*\.?\d*'  

否则,您只需要在原始版本中转义它:

regex = r'(\+|-)?\d*\.?\d*'  

使用r是在 python 中指定正则表达式字符串的首选方式,因为它指示原始字符串,不应解释它并减少必须使用反斜杠执行的转义量。它只是一个随处可见的 python 正则表达式习语。

r'(\+|-)?\d*\.?\d*'
#'(\\+|-)?\\d*\\.?\\d*'
于 2012-12-12T01:25:23.743 回答
3

您需要+在正则表达式中转义以获得文字+,因为它通常表示“某事的一个或多个实例”:

regex = r'(\+|-)?\d*\.?\d*'  

r使其成为“原始”字符串。如果没有r,正则表达式转义序列将被解释为字符串转义序列,它们会导致各种问题。(\b作为退格而不是单词边界,以及那种东西。)

于 2012-12-12T01:26:19.440 回答