0

私は正規表現とbeautifulsoupを通して以下を持っています。5968723334 などの UID 値を抽出する必要があります。

[u'/home.html', u'browse_settings.html', u'browse.html?', u'test.html?uid=5415292833', u'test.html?uid=5968723334', u'test.html?uid=5968723334', u'test.html?uid=5453943714', u'test.html?uid=5453943714', u'test.html?uid=6740871094', u'test.html?uid=6740871094', u'test.html?uid=5991868792', u'test.html?uid=5991868792', u'test.html?uid=25072413', u'test.html?uid=25072413', u'test.html?uid=6739965683', u'test.html?uid=6739965683', u'test.html?uid=7272910004', u'test.html?uid=7272910004', u'test.html?uid=13179298', u'test.html?uid=13179298', u'test.html?uid=5392816266', u'test.html?uid=5392816266', u'test.html?uid=5992588819', u'test.html?uid=5992588819', u'test.html?uid=6727114420', u'test.html?uid=6727114420', u'test.html?uid=7263648884', u'test.html?uid=7263648884', u'test.html?uid=5447240210', u'test.html?uid=5447240210', u'test.html?uid=5460515002', u'test.html?uid=5460515002', u'test.html?uid=5400731231', u'test.html?uid=5400731231', u'browse.html?params=_F_18_24_GB_0___grid_1', u'/home.html?t=1374068507', u'/account_info.html', u'http://www.example.com/browse.html?params=_F_18_24_GB_0___grid_0', u'http://www.example.com/contact.html', u'/logout.html', u'#top', u'/terms_of_service.html', u'http://safety.example.com']

このように 1 つの「uid」を抽出できましたが、すべての UID を抽出したいと思います。

>>> m = re.search("uid=(\d*)", soup.contents[0])
>>> print m
<_sre.SRE_Match object at 0x211b210>
>>> print m.group(1)
5442562712

助けてください!

4

2 に答える 2

0

リストをループして、それぞれに正規表現を適用できます。

uid = re.compile(r"uid=(\d*)")
uids = [match.group(1) for match in filter(None, map(uid.search, list_of_urls))]

上記は、次のコンパクトバージョンです。

uid = re.compile(r"uid=(\d*)")
uids = []
for url in list_of_urls:
    match = uid.search(url)
    if match is not None:
         uids.append(match.group(1))

このコードは、一部の URL に UID 番号が含まれていないことを考慮しています。

デモ:

>>> import re
>>> list_of_urls = [u'/home.html', u'browse_settings.html', u'browse.html?', u'test.html?uid=5415292833', u'test.html?uid=5968723334', u'test.html?uid=5968723334', u'test.html?uid=5453943714', u'test.html?uid=5453943714', u'test.html?uid=6740871094', u'test.html?uid=6740871094', u'test.html?uid=5991868792', u'test.html?uid=5991868792', u'test.html?uid=25072413', u'test.html?uid=25072413', u'test.html?uid=6739965683', u'test.html?uid=6739965683', u'test.html?uid=7272910004', u'test.html?uid=7272910004', u'test.html?uid=13179298', u'test.html?uid=13179298', u'test.html?uid=5392816266', u'test.html?uid=5392816266', u'test.html?uid=5992588819', u'test.html?uid=5992588819', u'test.html?uid=6727114420', u'test.html?uid=6727114420', u'test.html?uid=7263648884', u'test.html?uid=7263648884', u'test.html?uid=5447240210', u'test.html?uid=5447240210', u'test.html?uid=5460515002', u'test.html?uid=5460515002', u'test.html?uid=5400731231', u'test.html?uid=5400731231', u'browse.html?params=_F_18_24_GB_0___grid_1', u'/home.html?t=1374068507', u'/account_info.html', u'http://www.example.com/browse.html?params=_F_18_24_GB_0___grid_0', u'http://www.example.com/contact.html', u'/logout.html', u'#top', u'/terms_of_service.html', u'http://safety.example.com']
>>> uid = re.compile(r"uid=(\d*)")
>>> [match.group(1) for match in filter(None, map(uid.search, list_of_urls))]
[u'5415292833', u'5968723334', u'5968723334', u'5453943714', u'5453943714', u'6740871094', u'6740871094', u'5991868792', u'5991868792', u'25072413', u'25072413', u'6739965683', u'6739965683', u'7272910004', u'7272910004', u'13179298', u'13179298', u'5392816266', u'5392816266', u'5992588819', u'5992588819', u'6727114420', u'6727114420', u'7263648884', u'7263648884', u'5447240210', u'5447240210', u'5460515002', u'5460515002', u'5400731231', u'5400731231']
于 2013-07-17T14:01:35.737 に答える