2013-02-18 73 views
8

这是用Python编写的,Python正则表达式re.match,为什么这段代码不起作用?

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

我的问题是:

  1. 为什么re.match没有发现什么?
  2. 模式中使用或不使用括号有什么区别?
+0

@nhahtdh:' \ s'和'\ d'在普通的python字符串中没有任何意义,所以在这种特殊情况下没有区别,反斜杠也不需要转义。 – 2013-02-18 10:11:44

+0

@MartijnPieters:你说得对,但是原始字符串对于清除混淆仍然非常有用。不同的语言对'''''有不同的处理方式,后面跟着一个不构成转义序列的字符。 – nhahtdh 2013-02-18 10:14:01

+1

@nhahtdh:我完全同意;使用正则表达式的'r''原始字符串当然是一个好主意,并且是最佳实践。就在这种情况下,OP是幸运的,没有任何区别。 :-) – 2013-02-18 10:16:01

回答

18

re.match“匹配”自字符串开始,但有一个额外的1

改为使用re.search,它将在字符串中的任意位置“搜索”。而且,你的情况,也发现一些:

>>> re.search(pattern,s).groups() 
('89059809102', '30589533') 

如果你删除模式的括号中,它仍然会返回一个有效_sre.SRE_Match,对象,但空groups

>>> re.search('\s\d{11}/\d{8}',s).groups() 
() 
+1

这是一个明确的解释。我明白你的意思,谢谢! – bing 2013-02-19 00:09:40

相关问题