正则表达式:在python中获取字符串和可选的额外字符串

时间:2015-02-15 00:10:02

标签: python regex

我在html网页列表中查找带有正则表达式的这些网址,每个网页都有自己独特的网址,如下所示

http://sfbay.craigslist.org/search/sfc/apa?
http://sfbay.craigslist.org/search/sfc/apa?s=100
http://sfbay.craigslist.org/search/sfc/apa?s=200
http://sfbay.craigslist.org/search/sfc/apa?s=300

我尝试过这个正则表达式尝试获取第一个url,以及下面的第一个没有字符串的url

re_search = '(http\:\/\/sfbay\.craigslist\.org\/search\/sfc\/apa\?(s\=\d+)?)'
searched_urls = re.findall(re_search, str(search_page_html))
searched_urls
  • search_page_html,是html页面列表

它给出了这个结果,但我只想要每个元组的第一个结果。

('http://sfbay.craigslist.org/search/sfc/apa?', ''),
('http://sfbay.craigslist.org/search/sfc/apa?s=100', 's=100'),
('http://sfbay.craigslist.org/search/sfc/apa?s=200', 's=200'),
('http://sfbay.craigslist.org/search/sfc/apa?s=300', 's=300'),

提前致谢!

1 个答案:

答案 0 :(得分:2)

在正则表达式中,一对括号将捕获匹配。你有两对括号,因此在每个元组中有两个匹配。

(s\=\d+)

正在捕获'''s=100''s=200''s=300'。您可以通过将?:添加到括号的开头,将该组更改为捕获组,如下所示:

(?:s\=\d+)