0

我正在尝试从下面的 2 段代码中提取名称:“ 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>

正则表达式目前不起作用,如何解决?

我的正则表达式:

(?<=<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。感谢你

4

4 回答 4

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 ... >并抓取它之后的所有内容,直到下一个<

于 2013-09-30T22:18:24.153 回答
1

根据原始数据的变化,您无需指定整行,只需指定要捕获的部分......“有效成分”是捕获<开始标签后所有非字符的部分...>([^<]+)<

import re
InLines = """<td><a href="/worldclock/city.html?n=97">Harrisburg</a><span id=p217s class=wds> *</span></td>\n<td><a href="/worldclock/city.html?n=3551">Gujranwala</a><span id=p204s class=wds></span></td>"""
Pattern = r'city\.html\?n=\d+">([^<]+)</a><span'
M = re.findall(Pattern, InLines)
print M
['Harrisburg', 'Gujranwala']
于 2013-09-30T22:20:10.280 回答
0

试试这个正则表达式:

([^>]*)<\s*/a\s*>
于 2013-09-30T22:17:38.243 回答
0

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

于 2013-09-30T22:23:25.783 回答