我想用 python 解析一个简单的字符串 -
Limits paramA : (7, 45) paramB : (0, 0) paramC : (1, 23)
我想以不同的整数提取 7、45、0、0、1、23。有人可以告诉我如何提取这个吗?
论坛上有很多字符串解析问题,但我找不到最适合我的答案。
谢谢你。
我想用 python 解析一个简单的字符串 -
Limits paramA : (7, 45) paramB : (0, 0) paramC : (1, 23)
我想以不同的整数提取 7、45、0、0、1、23。有人可以告诉我如何提取这个吗?
论坛上有很多字符串解析问题,但我找不到最适合我的答案。
谢谢你。
使用regex
:
In [71]: import re
In [72]: strs="Limits paramA : (7, 45) paramB : (0, 0) paramC : (1, 23)"
In [74]: [int(digit) for digit in re.findall(r'\d+',strs)]
Out[74]: [7, 45, 0, 0, 1, 23]
>>> import re
>>> import ast
>>> nums = [num for tup in [ast.literal_eval(tup) for tup in re.findall('\([^)]*\)', s)] for num in tup]
[7, 45, 0, 0, 1, 23]
仅提取括号内的数字。
如果您只想要字符串中的所有数字:
>>> import re
>>> s = 'Limits paramA : (7, 45) paramB : (0, 0) paramC : (1, 23)'
>>> [int(n) for n in re.findall(r'\d+', s)]
[7, 45, 0, 0, 1, 23]
如果您只想在括号内查找数字(在这种情况下结果相同):
>>> [int(n) for m in re.findall(r'\(([\d, ]+)\)', s) for n in m.split(',')]
[7, 45, 0, 0, 1, 23]
这是一个示例,说明这种差异可能很重要:
>>> s = 'Limits param1 : (7, 45) param2 : (0, 0) param3 : (1, 23)'
>>> [int(n) for n in re.findall(r'\d+', s)]
[1, 7, 45, 2, 0, 0, 3, 1, 23]
>>> [int(n) for m in re.findall(r'\(([\d, ]+)\)', s) for n in m.split(',')]
[7, 45, 0, 0, 1, 23]
请注意,第一种方法也匹配1
fromparam1
和2
fromparam2
等。