2017-01-17 16 views
1

URL構造体に数千のURL値を含む文字列リストがあり、URL値から特定の情報を抽出するためにregexを使用しようとしています。以下は、あなたがこの特定のURL(データ全体の数字のみが変化し、他の多くのレコードがこの形式であることに注意してください)の構造についてのアイデアを得ることができ、そこからURL例を示します:正規表現を使用して文字列リストから特定の情報を抽出する

url_id | url_text 
15  | /course/123908/discussion_topics/394785/entries/980389/read 

使い方私はURLはこのような構造を持っている見つけることができるのpythonでreライブラリ:

re.findall(r"/course/\d{6}/discussion_topics/\d{6}/entries/\d{6}/read", text) 

は、しかし、私はまた、「394785」と「980389」の値を抽出し、次のようになり、新たな行列を作成する必要があります

url_id | topic_394785 | entry_980389 | {other items will be added as new column} 
15  | 1   | 1   | 0  | 0  | 1 | it goes like this 

この特定の情報の抽出に誰かが助けてくれますか?私は 'str'の 'split'メソッドがオプションになる可能性があることを知っています。しかし、もっと良い解決策があるのだろうかと思います。

ありがとうございます!

+2

' ** **最適なソリューションです。 – Tomalak

+1

regexキャプチャグループを使用するだけではどうですか? – Tagc

+1

はい、 're.finditer'を持つグループをキャプチャして正規表現を使用して、マッチ全体にアクセスすることができます。 –

答えて

2

このような意味ですか?あなたの文字列が `/`、そして `スプリット()で区切られたフィールドの固定数、で構成されている場合

import re 

text = '/course/123908/discussion_topics/394785/entries/980389/read' 
pattern = r"/course/\d{6}/discussion_topics/(?P<topic>\d{6})/entries/(?P<entry>\d{6})/read" 

for match in re.finditer(pattern, text): 
    topic, entry = match.group('topic'), match.group('entry') 
    print('Topic ID={}, entry ID={}'.format(topic, entry)) 

出力

Topic ID=394785, entry ID=980389 
+0

あなたの答えをありがとう!しかし、別の質問があります。ループを使わずに 'list 'に を適用することは可能ですか? – renakre

+0

'[text1、text2、text3、...]'のようなもの – renakre

+0

@renakreわかりません。リストの繰り返しで何が問題になっていますか? – Tagc

関連する問題