2011-02-01 7 views
3

私は文字列(通常はツイート)から値の束を抽出するための小さなツールを書いています。文字列内の通貨値はどのようにして見つけられますか?

文字列は、通貨記号(£、$、€など)とハッシュタグ(#foo #bar)のプレフィックスが付いた単語と数字で構成できます。私はappEngineで動作していてtweepyを使ってつぶやきを持ってきます。

は、私は値を見つける必要があり、現在のコードは以下の通りです:

tagex = re.compile(r'#.*') 
curex = re.compile(ur'[£].*') 
for x in api.user_timeline(since_id = t.lastimport): 
      tags = re.findall(tagex, x.text) 
      amount = re.findall(curex, x.text)[0] 
      logging.info("Text: " + x.text) 
      logging.info("Tags: " + str(tags)) 
      logging.info("Amount: " + amount) 
x.textは「タクシーロンドン£6.50 #projectfooの#clientmeeting」

tagexは、ハッシュタグの罰金を見つけ例えばある

、私は現在私が得る量を抽出するためにキュレックスを得ることができません: 金額:£6.50 #projectfoo #clientmeeting。

金額を浮動小数点にするために通貨記号を分離する必要がありますが、後でそれをかなりシンプルにする必要があります。

+2

あなたの質問は? – SilentGhost

答えて

15
>>> re.search(ur'([£$€])(\d+(?:\.\d{2})?)', s).groups() 
(u'\xa3', u'6.50') 
  • [£$€]マッチの通貨記号2桁
  • ()年代に続くオプションの小数点に続く1桁以上の数字が
別々シンボル及び量をキャプチャ
  • \d+(?:\.\d{2})マッチ

    あなたの正規表現の問題は、.*が何かにマッチし、貪欲であることです。正規表現の最後にmatc続くすべてのことをhes。

  • +0

    awesome thanks :-)また、ファイルの先頭に# - * - coding:utf-8 - * - を追加する必要がありましたが、 –

    +0

    @Sam 2.xではそれが必要ですが、3.xのデフォルトはutf-8です。私はこの場合のように必要な場合にのみヘッダーを追加します。 – marcog

    +0

    あなたの解決のためにあまりにも多く – mrblue

    1

    私はMarcogの正規表現はドル記号をエスケープすることにより、ビット

     
    
        re.search(ur'([£\$€])(\d+(?:\.\d{2})?)', s).groups() 
    
    

    を変更する変更されました。

    関連する問題