2017-05-07 4 views
-4

Python 3.4を使用して次のような文字列のデータから117,0.049、207などの数値を抽出するにはどうすればよいですか?どのようなパターンでも、特定のデータを文字列から抽出するにはどうすればよいですか?

particulate 117㎍/㎥bad(81~150),ozone 0.049ppmaverage(0.041~0.080),overall air quality 207bad(151~250) 
+0

最も重要なステップは、*正確に*データ構造とそれから必要なものを分析することです。たとえば、「数字」と言うと、「81 150」と「0.041 0.080」はどうですか?任意の数字を取得するには簡単ですが、正確なものを得るためにより多くの努力が必要です。 – cdarke

答えて

1

解析非構造化テキストは厄介です:

input='particulate 117㎍/㎥bad(81~150),ozone 0.049ppmaverage(0.041~0.080),overall air quality 207bad(151~250)' 

import re 
input=re.sub(r'\(.*?\)','',input) 
results=re.findall(r'[\d.]+',input) 

print(results) # this prints ['117', '0.049', '207'] 

を...しかし、いつもあなたが困難な場合が望む結果を得るために:あなたはここに見られるように、正規表現で迅速な結果を得ることができます。

すべての

まず...のステップにより溶液のステップを議論してみましょう、あなたの入力は、カッコ内の数字が含まれています - あなたはそれを望んでいません。そこで、我々は最初の正規表現の置換で括弧を削除する必要があります。

input=re.sub(r'\(.*?\)','',input) 
# now input is: 
# particulate 117㎍/㎥bad,ozone 0.049ppmaverage,overall air quality 207bad 

サブ文字列のこの置換を検索開口部ブラケットで始まる「(」と閉じ括弧で終わる「)」とすることによって、それらを置き換え空の文字列この表現を書くには、いくつかの細部を考慮に入れる必要があります:

  • 大括弧は正規表現で特別な意味を持ちます。あなたの入力で実際の括弧を参照するには、パターンでエスケープし、 '('の代わりに '(')を書く必要があります。
  • 通常、パターンr 'あなたの入力の括弧が一致しない場合は、あなたの入力の括弧が一致しない場合は、

残りの入力から数字を選びたい数字に小数点が含まれている可能性があるので、正規表現でもこれを許可する必要がありますが、一致する数字正確に正規表現を使うのは難しいです。当社のソリューションは、ピックアップしていないこと、有効なのOME定義):

-1.32 1.04e4 -3.14e-23 

ここでは、私たちのパターンが数字としてピックアップした文字列である---しかし、あなたはそれを望んでいないことがあります。

10.24.12.123 

すべてこれは修正することができますが、パターンはより複雑になります。そして、取得したいものと取得したくないものを正確に決定する必要があります。

ここにはPython regular expression documentationへのリンクがあります。

+0

大変感謝しています!出来た!!! –

+0

解決策に満足している場合は、それを正しい解決策として受け入れます。 –

+0

ここは新しいです。それ、どうやったら出来るの? –

関連する問題