修复正则表达式以从HTML中提取城市名称

时间:2013-09-30 22:10:45

标签: python regex

我正在尝试提取名称:“Harrisburg”& “Gujranwala”来自以下两段代码:

<td><a href="/worldclock/city.html?n=97">Harrisburg</a><span id=p217s class=wds> *</span></td>
<td><a href="/worldclock/city.html?n=3551">Gujranwala</a><span id=p204s class=wds></span></td>

到目前为止,Regex无效,如何解决?

My Regex:

(?<=<td><a href="\/worldclock\/city\.html\?n=[0-9]{0, 5}">).*(?=<\/a><span id=p[0-9]{0, 4}s class=wds>( \*)</span><\/td>) 

正则表达式适用于python。 Thanku

4 个答案:

答案 0 :(得分:1)

import re

city_html = """<td><a href="/worldclock/city.html?n=97">Harrisburg</a><span id=p217s class=wds> *</span></td>
               <td><a href="/worldclock/city.html?n=3551">Gujranwala</a><span id=p204s class=wds></span></td>"""

cities = re.findall(r'(?:city\.html.*?>)(.*?)(?:<)', city_html)
# cities == ['Harrisburg', 'Gujranwala']

这个RegEx正在做的是寻找city.html ... >并抓住它之后的所有内容,直到下一个<

答案 1 :(得分:1)

根据原始数据的变化,您不需要指定整行,只需要指定要捕获的部分......“活性成分”是捕获所有非{{{开始标记后的1}}个字符... <

>([^<]+)<

答案 2 :(得分:0)

试试这个正则表达式:

([^>]*)<\s*/a\s*>

答案 3 :(得分:0)

除非lookbehind子表达式具有固定长度,否则您无法使用lookbehinds。这是因为正则表达式引擎需要知道从哪里开始寻找匹配。在这种情况下,[0-9]{0, 5}部分表示正则表达式可以匹配不同长度的字符串。 (至少这是它在Perl中的工作方式。)