2013-04-11 11 views
6

Pythonの正規表現を頭に入れて、特定の値を抽出する正規表現を思いつくのに問題があります。Python正規表現でデータを抽出する

私が解析しようとしているページには、次の形式、私はこのケースでは、111111をすべての値を抽出する必要があり

\"productId\":\"111111\" 

に表示されproductIdsの数を持っています。

+0

あなたは[Pythonの正規表現のドキュメント](http://docs.python.org/2/library/re.html)を読み取ることがありますか? –

+1

あなたはregex、python、またはその両方に新しい人ですか?どの部分に助けが必要ですか?何を試しましたか? – cmd

+1

[Pythonで文字列の中から部分文字列を取り出す方法は?](http://stackoverflow.com/questions/4666973/how-to-extract-a-substring-from-inside-a-string-in -python) –

答えて

15
t = "\"productId\":\"111111\"" 
m = re.match("\W*productId[^:]*:\D*(\d+)", t) 
if m: 
    print m.group(1) 

意味マッチ非単語文字(\W*)、productId。その後、非数字(\D*)と一致し、次の数字((\d+))と一致してキャプチャします。

出力

111111 
0

はこれを試してみてください、これはあなたがやりたいしない場合は、

​​

は、データのより多くの例を与えます。このような

7

何か:彼らは(非生)Python文字列によると、正規表現の構文によって、両方のエスケープ文字として使用されているので、ここで

In [13]: s=r'\"productId\":\"111111\"' 

In [14]: print s 
\"productId\":\"111111\" 

In [15]: import re 

In [16]: re.findall(r'\d+', s) 
Out[16]: ['111111'] 
+0

私はこれをもっとPythonic見つける。 :) – skytreader

0

バックスラッシュは、混乱に追加される場合があります。

これは、あなたが投稿形式から製品IDを抽出します。

re_prodId = re.compile(r'\\"productId\\":\\"([^"]+)\\"') 

生の文字列r'...'エスケープバックスラッシュ1つのレベルで離れません。文字列区切り文字として一重引用符を使用すると、二重引用符を逃す必要がなくなります。最終的にバックスラッシュは正規表現言語の特別な意味のため倍増(1回のみ)されます。

あなたは、いくつかのテキスト内のすべての一致を検索する正規表現オブジェクトのfindall()メソッドを使用することができます。

re_prodId.findall(text_to_search) 

これは、すべての製品IDのリストを返します。非列の文字([^:]*)と:続いた後

関連する問題