我正在尝试提取名称:“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
答案 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中的工作方式。)