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 に答える