Python-re.findall表现怪异

发布于 2021-02-02 23:24:37

源字符串为:

# Python 3.4.3
s = r'abc123d, hello 3.1415926, this is my book'

这是我的模式:

pattern = r'-?[0-9]+(\\.[0-9]*)?|-?\\.[0-9]+'

但是,re.search可以给我正确的结果:

m = re.search(pattern, s)
print(m)  # output: <_sre.SRE_Match object; span=(3, 6), match='123'>

re.findall 只是转储一个空列表:

L = re.findall(pattern, s)
print(L)  # output: ['', '', '']

为什么不能re.findall给我期望的清单:

['123', '3.1415926']
关注者
0
被浏览
180
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。
    s = r'abc123d, hello 3.1415926, this is my book'
    print re.findall(r'-?[0-9]+(?:\.[0-9]*)?|-?\.[0-9]+',s)
    

    使用原始模式时,你无需两次逃脱。

    输出:['123', '3.1415926']

    同样,返回类型将是字符串列表。如果要将返回类型设置为整数和浮点数,请使用map

    import re,ast
    s = r'abc123d, hello 3.1415926, this is my book'
    print map(ast.literal_eval,re.findall(r'-?[0-9]+(?:\.[0-9]*)?|-?\.[0-9]+',s))
    

    输出: [123, 3.1415926]



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看