用多重分隔符分割字符串的一部分

2024-04-25 09:03:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python2.7编程,只需要从如下所示的字符串中获取数字:

str=lat/lng: (33.17266673943457,36.14166408777237),lat/lng: (30.354898307940665,33.88161934912205)

我不能用

str[from:to]

因为这些数字的长度改变了。你知道吗

我试过使用

print re.split('\(,\)', str) 

以及

filter(None, re.split("(,]+", str))

但我没有得到我需要的结果。 非常感谢你! 莎拉


Tags: to字符串fromrenone编程数字filter
3条回答

使用正则表达式进行匹配,而不是拆分:

> str= "str=lat/lng: (33.17266673943457,36.14166408777237),lat/lng: (30.354898307940665,33.88161934912205)"

> numbers = re.findall(r"(-*\d+\.\d+)", str)

> numbers
['33.17266673943457',
 '36.14166408777237',
 '30.354898307940665',
 '33.88161934912205']
re.findall("\(([\d\.]+)\s*,\s*([\d\.]+)\)",s)

我觉得应该有用

>>> s = "lat/lng: (33.17266673943457,36.14166408777237),lat/lng: 30.354898307940665,33.88161934912205)"
>>> re.findall("\((-?[\d\.]+)\s*,\s*(-?[\d\.]+)\)",s)
[
   ('33.17266673943457', '36.14166408777237'), 
   ('30.354898307940665', '33.88161934912205')
]

你可以试试这个正则表达式:

import re
coords="lat/lng: (33.17266673943457,36.14166408777237),lat/lng: (30.354898307940665,33.88161934912205)"
coords = re.sub("[a-z/: ()]+", '', coords).split(",")
# ['33.17266673943457', '36.14166408777237', '30.354898307940665', '33.88161934912205']

相关问题 更多 >