【问题标题】:Why is the return value of an empty python regexp search a match?为什么空的 python 正则表达式搜索的返回值匹配?
【发布时间】:2010-12-16 20:16:14
【问题描述】:

将空字符串传递给正则表达式对象时,搜索的结果是匹配对象而不是 None。应该是 None ,因为没有什么可匹配的?

import re

m = re.search("", "some text")
if m is None:
    print "Returned None"
else:
    print "Return a match"

顺便说一句,使用特殊符号 ^$ 会产生相同的结果。

【问题讨论】:

    标签: python regex


    【解决方案1】:

    空模式匹配字符串的任何部分。

    检查一下:

    import re
    
    re.search("", "ffff")
    <_sre.SRE_Match object at 0xb7166410>
    
    re.search("", "ffff").start()
    0
    
    re.search("$", "ffff").start()
    4
    

    添加 $ 不会产生相同的结果。比赛在最后,因为它是唯一的地方。

    【讨论】:

    【解决方案2】:

    这样看:您搜索的所有内容都已匹配,因此搜索成功并且您获得了一个匹配对象。

    【讨论】:

      【解决方案3】:

      您需要做的不是检查 m 是否为 None,而是要检查 m 是否为 True:

      if m:
          print "Found a match"
      else:
          print "No match"
      

      另外,空模式匹配整个字符串。

      【讨论】:

      • 如果 m 是 None 那么 bool(m)False。他应该检查m 是否为None
      • @gruszczy 虽然没有说是否有匹配项
      • In [5]: bool(re.search("", "ffff")) Out[5]: True In [6]: bool(re.search("$", "ffff ")) 出[6]:真
      • 1.) 空模式匹配任何内容,2.) bool(re.match('$', 'ffff')) 返回 False。搜索行为必须是一些正则表达式怪癖
      • 当然返回False,因为re.match('$', 'ffff')返回None,强制为bool时返回False。
      【解决方案4】:

      那些正则表达式成功匹配了 0 个文字字符。

      所有的字符串都可以认为是在字符之间包含了无数个空字符串:

      'Foo' = '' + '' + ... + 'F' + '' + ... + '' + 'oo' + '' + ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 2021-10-12
        • 1970-01-01
        相关资源
        最近更新 更多