[英]How to extract numbers from a string in python
我有一串坐标如下
str='(707.027,949.189),(598.919,6.48649)'
我想提取值,但括号越来越难以解决。 我尝试了以下方法:
str.split(",") which gives ['(707.027', '949.189)', '(598.919', '6.48649)']
str.split(",\(\)") which gives ['(707.027,949.189),(598.919,6.48649)']
您的字符串是有效的 Python 文字,因此请尝试ast.literal_eval :
>>> from ast import literal_eval
>>> s = '(707.027,949.189),(598.919,6.48649)'
>>> literal_eval(s)
((707.027, 949.189), (598.919, 6.48649))
这会将s
解析为 Python 代码并对其进行评估(安全地,作为文字值),从而产生一个元组的元组。
给定您的字符串,您还可以使用这种更通用的方法:
import re
s = '(707.027,949.189),(598.919,6.48649)'
nums = re.findall('\d*\.\d*',s)
nums #['707.027', '949.189', '598.919', '6.48649']
这会从任何字符串中删除所有浮点数..然后你可以对它们做任何你想做的事情,即将它们放入元组中:
coords = list(zip(nums[::2],nums[1::2]))
coords #[('707.027', '949.189'), ('598.919', '6.48649')]
python 内置 function eval
可以做到,它将字符串解析为代码。
>>> s = '(707.027,949.189),(598.919,6.48649)'
>>> eval(s)
((707.027, 949.189), (598.919, 6.48649))
尽管在这种情况下您可以使用eval
,但这通常不是处理此类数据的安全方法,尤其是当您尝试解释的字符串不在您的代码中或您自己输入时。
根据您的要求,这是使用正则表达式的解决方案:
import re
subject = '(707.027,949.189),(598.919,6.48649)'
match = re.search(r"\(([\d.]+),([\d.]+)\),\(([\d.]+),([\d.]+)\)", subject)
numbers = []
p1, p2 = tuple(), tuple()
if match:
numbers = [float(match.group(n)) for n in range(1, 5)]
# or
p1 = (float(match.group(1)), float(match.group(2)))
p2 = (float(match.group(3)), float(match.group(4)))
print(numbers, p1, p2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.