1
string = '-p 0 0.6724194 0.4034517 -p 0 0 0.4034517 -p 0 0 0.6724194'

arrays = re.findall(r'-?\d+?.\d+|-?\d', string)

我一直在尝试获取-p字符串中的值列表。我一直在使用的表达方式不起作用。我试图返回这样的东西:

['0, 0.6724194, 0.4034517', '0, 0, 0.4034517', '0, 0, 0.6724194']

稍后我显然会将其转换为浮点数,但感谢您的帮助!

我正在寻找正则表达式修复,不过感谢您提供其他选项!

4

3 回答 3

4

试试这个:

>>> st = '-p 0 0.6724194 0.4034517 -p 0 0 0.4034517 -p 0 0 0.6724194'
>>> [f.strip() for f in st.split('-p') if f]
['0 0.6724194 0.4034517', '0 0 0.4034517', '0 0 0.6724194']

或者:

>>> [', '.join(f.strip().split()) for f in st.split('-p') if f]
['0, 0.6724194, 0.4034517', '0, 0, 0.4034517', '0, 0, 0.6724194']

或者,您可能只想得到一个浮动列表列表:

>>> [[float(e) for e in f.strip().split()] for f in st.split('-p') if f]
[[0.0, 0.6724194, 0.4034517], [0.0, 0.0, 0.4034517], [0.0, 0.0, 0.6724194]]

或者,也许是一本字典:

>>> {i:[float(e) for e in f.strip().split()] for i,f in enumerate(st.split('-p')[1:])}
{0: [0.0, 0.6724194, 0.4034517], 1: [0.0, 0.0, 0.4034517], 2: [0.0, 0.0, 0.6724194]}

或者,如果你真的想要一个正则表达式:

>>> re.findall(r'-[a-zA-Z]\s(\d?\.?\d+\s\d?\.?\d+\s\d?\.?\d+)', st)
['0 0.6724194 0.4034517', '0 0 0.4034517', '0 0 0.6724194']
于 2012-10-10T22:37:48.953 回答
0

请注意,句点/点/句号字符匹配任何字符。您可能想专门匹配小数点,因此请尝试转义句点。

于 2012-10-10T22:37:51.580 回答
0
import re
string = '-p 0 0.6724194 0.4034517 -p 0 0 0.4034517 -p 0 0 0.6724194'
for data in re.findall(r'[\s0-9\.]+', string):
    print data.split()

结果如下:

['0', '0.6724194', '0.4034517']
['0', '0', '0.4034517']
['0', '0', '0.6724194']
于 2012-10-10T22:56:03.203 回答