我正在关注正则表达式的教程。执行以下操作时出现错误:
regex = r'(+|-)?\d*\.?\d*'
显然,Python不喜欢(+ | - )。可能是什么问题?
另外,如果不在正则表达式之前添加r,可能会出现什么问题?
答案 0 :(得分:3)
+
是一个特殊角色。您可以使用括号指定字符范围,这比在这种情况下使用管道字符“或”更好。:
regex = r'([+-])?\d*\.?\d*'
否则,您只需要在原始版本中将其转义:
regex = r'(\+|-)?\d*\.?\d*'
使用r
是在python中指定正则表达式字符串的首选方法,因为它表示原始字符串,不应解释该字符串,并减少必须使用反斜杠执行的转义量。它只是一个你会在任何地方看到的python正则表达式。
r'(\+|-)?\d*\.?\d*'
#'(\\+|-)?\\d*\\.?\\d*'
答案 1 :(得分:3)
您需要在正则表达式中转义+
才能获得文字+
,因为它通常意味着“某个或多个实例”:
regex = r'(\+|-)?\d*\.?\d*'
r
使其成为“原始”字符串。如果没有r
,正则表达式转义序列将被解释为字符串转义序列,它们将导致各种问题。 (\b
是一个退格而不是单词边界,以及那种东西。)