Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式re.match,为什么这段代码不起作用?_Python_Regex - Fatal编程技术网

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

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 我的问题是: 为什么重新匹配没有找到任何东西 图案

这是用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
    “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
    具有字符转义(退格)的含义和作为正则表达式锚点(单词边界的开头)。:-)