4

文字列から変数番号「-34.99」を抽出して出力したい:

myString = "Test1 [cm]:     -35.00/-34.99/-34.00/0.09"

文字列の値が変更されます。Pythonで正規表現を使用するにはどうすればよいですか?

前もって感謝します

4

2 に答える 2

14

非正規表現のソリューションは次のとおりです。

myString = "Test1 [cm]:     -35.00/-34.99/-34.00/0.09"  
print myString.split("/")[1]

このコードをここでテストします。


正規表現ソリューションの1つは次のとおりです。

import re 
myString = "Test1 [cm]:     -35.00/-34.99/-34.00/0.09" 
print re.search(r'(?<=\/)[+-]?\d+(?:\.\d+)?', myString).group()

このコードをここでテストします。

説明:

(?<=\/)[+-]?\d+(?:\.\d+)?
└──┬──┘└─┬─┘└┬┘└───┬────┘
   │     │   │     │
   │     │   │     └ optional period with one or more trailing digits
   │     │   │
   │     │   └ one or more digits
   │     │
   │     └ optional + or -
   │
   └ leading slash before match 
于 2012-08-26T14:28:03.997 に答える
1

このような場合、re.findallはうまく機能します。

>>> import re
>>> myString = "Test1 [cm]:     -35.00/-34.99/-34.00/0.09"
>>> re.findall(r'([+-]?\d+\.\d+)',myString)
['-35.00', '-34.99', '-34.00', '0.09']

リスト内包表記を使用して、フロートを直接取得できます。

>>> [float(f) for f in re.findall(r'([+-]?\d+\.\d+)',myString)]
[-35.0, -34.99, -34.0, 0.09]

またはこのような2番目のもの:

>>> re.findall(r'([+-]?\d+\.\d+)',myString)[1]
'-34.99'

問題は、テキストのフローティングポイントの範囲をどれだけ受け入れるかということです。小数点のないものはありますか?指数?

>>> myString = "Test1 [cm]:     -35.00/-34.99/-34.00/0.09/5/1.0e6/1e-6"  

痛い!-これは正規表現で難しくなっています。

実際には、Pythonの文字列opsを使用した方がよい場合があります。

>>> ''.join([s for s in myString.split() if '/' in s]).split('/')
['-35.00', '-34.99', '-34.00', '0.09', '5', '1.0e6', '1e-6']

同じ方法でn番目を取得できます。

>>> n=2
>>> ''.join([s for s in myString.split() if '/' in s]).split('/')[n]
'-34.00'

次に、すべての奇妙なケースは、より難しい正規表現なしで機能します。

>>> map(float,''.join([s for s in myString.split() if '/' in s]).split('/'))
[-35.0, -34.99, -34.0, 0.09, 5.0, 1000000.0, 1e-06]
于 2012-08-26T14:37:58.987 に答える