我正在使用Regex来解析HTML(如果您正在阅读并执行此操作,我建议您改为使用HTMLParser)。
我的网页看起来像这样:
<div>עבר / Avr</div>
<div>עב/ר / Av/r</div>
如何在&#34;之前选择部件? /&#34; (空间,斜线,空间)和之后的#34; /&#34;?换句话说,我怎样才能选择字符串直到&#34; /&#34;?
我希望它会返回一个如下所示的列表:
[("עבר", "Avr"),("עב/ר", "Av/r")]
我知道我可以使用:
regex = re.compile('<div>(.+?)</div>').findall(resp)
resp = resp.split(' / ')
但我希望它可以使用正则表达式完成。
答案 0 :(得分:3)
你可以尝试下面的python代码。
>>> import re
>>> s = """<div>עבר / Avr</div>
... <div>עב/ר / Av/r</div>"""
>>> m = re.findall(r'^<div>(.*?) \/ ([^<]+)(?=<\/div>)', s, re.M)
>>> m
[('עבר', 'Avr'), ('עב/ר', 'Av/r')]
答案 1 :(得分:1)
您可以使用非捕获组通过单个正则表达式获取所需的部分。
变化:
regex = re.compile('<div>(.+?)</div>').findall(resp)
为:
matches = re.compile('<div>(.+?)(?: / ).*?</div>').findall(resp)
print matches # ['עבר']
答案 2 :(得分:0)
尝试美味的汤,Jsoup或削皮器来减少这一点,但一旦你达到这个可能仍然有问题。
负面展望并展望未来将会成功。你只需要转义“/”,因为它是一个保留字符。
re.search(".*?\/",html)
前瞻是(?&lt; = .....)
有关前瞻和后方的更多信息,请访问http://www.regular-expressions.info/lookaround.html。
另外,Beautiful Soup有一个方法.prettify()和apache StringEscapeUtils可以转义XML和HTML,以便在Jsoup中更好地解析。 Python也可以用unicode编码evrything。如果您在那里遇到问题,还可以选择删除标签和编码。