Python正規表現で特定の値を抽出するための正規表現を思い付くために、頭を抱え込むのに問題があります。
解析しようとしているページには、次の形式で表示される多数のproductIdがあります
\"productId\":\"111111\"
すべての値を抽出する必要があります、111111
この場合。
t = "\"productId\":\"111111\""
m = re.match("\W*productId[^:]*:\D*(\d+)", t)
if m:
print m.group(1)
word以外の文字(\W*
)、次にproductId
の後に列以外の文字([^:]*
)と:
。次に、非数字(\D*
)と一致し、次の数字をキャプチャします((\d+)
)。
出力
111111
このようなもの:
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']
ここでのバックスラッシュは、(raw以外の)Python文字列と正規表現構文の両方でエスケープ文字として使用されるため、混乱を招く可能性があります。
これにより、投稿したフォーマットから製品IDが抽出されます。
_re_prodId = re.compile(r'\\"productId\\":\\"([^"]+)\\"')
_
生の文字列_r'...'
_は、1レベルのバックスラッシュエスケープを取り除きます。文字列区切り文字として一重引用符を使用すると、二重引用符をエスケープする必要がなくなります。そして最後に、正規表現言語での特別な意味のために、バックスラッシュは2回(1回だけ)になります。
Regexpオブジェクトのfindall()
メソッドを使用して、テキスト内のすべての一致を検索できます。
_re_prodId.findall(text_to_search)
_
これにより、すべての製品IDのリストが返されます。
これを試して、
:\\"(\d*)\\"
これがあなたの望むことをしないなら、あなたのデータのより多くの例を挙げてください。