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