【发布时间】:2013-02-02 17:37:20
【问题描述】:
这是用 Python 编写的,
import re
s='1 89059809102/30589533 IronMan 30 Santa Ana Massage table / IronMan 30 Santa Ana Massage table'
pattern='\s(\d{11})/(\d{8})'
re.match(pattern,s)
它没有返回。
我试着去掉括号,
pattern='\s\d{11}/\d{8}'
它仍然返回none。
我的问题是:
- 为什么 re.match 没有找到任何东西?
- 模式中带括号和不带括号有什么区别?
【问题讨论】:
-
@nhahtdh:
\s和\d在普通的 python 字符串中没有意义,所以在这种特定情况下没有区别,反斜杠不需要转义。 -
@MartijnPieters:你是对的,但原始字符串对于消除混淆仍然非常有用。不同语言对
\后跟不形成转义序列的字符的处理方式不同。 -
@nhahtdh:我非常同意;对正则表达式使用
r''原始字符串当然是一个好主意,也是最佳实践。就在这种情况下,OP很幸运,没有区别。 :-) -
@nhahtdh:几乎所有使用
\单字符转义序列的语言都遵循 ISO C 标准(参见third column on the control codes table),所以一般说你可以假设在任何支持这些转义码的语言中最多有 9 个这样的转义码。事实上,我知道没有一种编程语言支持这样的转义码并且支持超过这 9 个(python 本身支持其中 8 个,\e不常见)。 -
@nhahtdh: LBNL: 在所有可能混淆的正则表达式锚和字符类中,只有
\b具有字符转义(退格)和作为正则表达式锚(单词边界的开头)。 :-)