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 个回答
-
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]