簡體   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