繁体   English   中英

如何从 python 中的字符串中提取数字

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM