一尘不染

Python-re.findall表现怪异

python

源字符串为:

# 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']

阅读 382

收藏
2020-02-05

共1个答案

一尘不染

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]

2020-02-05