2012-04-05 26 views
5

このプログラムでは、 "I = 23mm"や "H = 4V"のような表現をしています。または4)それから、私はそれを整数に変えることができます。1ワードの文字列から数値を抽出する

私が問題としているのは、数字を1ワードとしているため、split()や何も使用できないということです。

一つの例は、私が見たが、wouldntの作業がした -

I="I=2.7A" 
[int(s) for s in I.split() if s.isdigit()] 

それは数字だけをスペースで区切られているかかるので、これは動作しwouldntの。単語int078vertに数字がある場合、それはそれを抽出しません。また、私には区切るスペースがありません。

私は、このように見えたものを試してみました

re.findall("\d+.\d+", "Amps= 1.4 I") 

ますが渡されている番号は常に2桁の数字ではないので、それは、いずれかの動作didntの。それは5のようなものか、13.6のようなものになる可能性があります。私は、この文字列のうちの数だけを抽出できるようにするため、私は、このような

I="I=2.4A" 

または

I="A=3V" 

として文字列を渡す場合はそのことを書くためにどのようなコード

が必要なのでしょうか? (そしてそれについて操作を行う)?私が区切ることのできるスペースやその他の定数はありません。

+0

あなたがしているように見え、これは試してみてくださいこれを整数と10進数の両方で解決しようとしています。各文字列は常に1つの数字だけを持っていますか? – yoozer8

+0

うん。各文字列は常に1つの数字を持ちますが、その数字を作るために複数の小数を持つことがあります。 – Kyle

答えて

11
>>> import re 
>>> I = "I=2.7A" 
>>> s = re.search(r"\d+(\.\d+)?", I) 
>>> s.group(0) 
'2.7' 
>>> I = "A=3V" 
>>> s = re.search(r"\d+(\.\d+)?", I) 
>>> s.group(0) 
'3' 
>>> I = "I=2.723A" 
>>> s = re.search(r"\d+(\.\d+)?", I) 
>>> s.group(0) 
'2.723' 
+0

ありがとうございました。うまくいった。 – Kyle

3

REは、このために、おそらく良いですが、答えはすでに投稿されている1つのREとして、私はあなたの非正規表現の例を取ると、それを修正します:


One example I saw but wouldnt work was - 

I="I=2.7A" 
[int(s) for s in I.split() if s.isdigit()] 

良いことは、引数を取ることができるsplit()です。

extracted = float("".join(i for i in I.split("=")[1] if i.isdigit() or i == ".")) 

。なお、ここであなたが供給REの内訳です:それを行うには

"\d+.\d+" 
\d+ #match one or more decimal digits 
. #match any character -- a lone period is just a wildcard 
\d+ #match one or more decimal digits again 

一つの方法(正確に)次のようになります。

"\d+\.?\d*" 
\d+ #match one or more decimal digits 
\.? #match 0 or 1 periods (notice how I escaped the period) 
\d* #match 0 or more decimal digits 
+0

あなたの分割ソリューションはきれいです:D。 +1 –

+0

別の方法が好きです。 +1 – Kyle

関連する問題