Python正则表达式re.match,为什么这段代码不起作用?
这是用Python编写的Python正则表达式re.match,为什么这段代码不起作用?,python,regex,Python,Regex,这是用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 我的问题是: 为什么重新匹配没有找到任何东西 图案
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
“matches”从字符串开头开始,但还有一个额外的1
改为使用re.search
,它将“搜索”字符串中的任何位置。在你的情况下,还可以找到一些东西:
>>> re.search(pattern,s).groups()
('89059809102', '30589533')
如果删除模式中的括号,它仍将返回有效的\u sre.sre\u Match
,对象,但组为空:
>>> re.search('\s\d{11}/\d{8}',s).groups()
()
@nhahtdh:\s
和\d
在普通python字符串中没有意义,因此在这种特定情况下没有区别,反斜杠不需要转义。@MartijnPieters:你是对的,但是原始字符串对于消除混淆仍然非常有用。不同的语言对\
后跟不构成转义序列的字符有不同的处理方法。@nhahdh:我完全同意;为正则表达式使用r'
原始字符串当然是一个好主意,也是最佳实践。就在这种情况下,OP是幸运的,没有区别。:-)@NHAHDH:几乎所有使用\
单字符转义序列的语言都遵循ISO C标准(请参见),因此一般来说,您可以假设在支持这些转义序列的任何语言中最多有9个这样的转义码。事实上,据我所知,没有一种编程语言支持这样的转义码,并且支持的代码比这9种代码多(python本身支持其中的8种,\e
并不常见)。@nhahdh:LBNL:在所有可能混淆的正则表达式锚和字符类中,只有\b
具有字符转义(退格)的含义和作为正则表达式锚点(单词边界的开头)。:-)