python - 搜索 html 标签时 python 中的贪婪正则表达式错误

标签 python regex regex-greedy

我是 python regex

的新手

我知道如何使用 '?' 来解决贪心问题 下面的例子展示了它是如何工作的:

str2=' "anupam""behera" '
match2=re.search(r'".*?"',str2)
print match2.group()'

我得到输出 "anupam"

但在以下情况下不起作用:

str='<a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z">Main page</a>'
match=re.findall(r'<a href="(.*?)">(.*)</a>',str)
for link in match:
print link[0]

我希望得到 :/wiki/Main_Page 的输出。但我得到的是:"/wiki/Main_Page"title="访问主页 [z]"accesskey="z">主页

最佳答案

要解决您的问题,您需要更加具体,例如:

r'<a href="(.*?)"\s.*?>(.*)</a>'

但是,不要使用正则表达式来解析 html/xml,如 famous answer 中所述.

使用像 lxml 这样的解析器。看看这是多么简单和自然:

from lxml.etree import fromstring
tag = '<a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z">Main page</a>'

tag = fromstring(tag)

print tag.attrib.get('href')

打印:

/wiki/Main_Page

将此功能与类似 xpath 的东西结合起来或 css selectors并且您在解析任何 html 或 xml 格式时都不会遇到任何问题。

关于python - 搜索 html 标签时 python 中的贪婪正则表达式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38289273/

相关文章:

Javascript Regex-用相同数量的另一个字符替换字符序列

java - 正则表达式根据允许的分隔符的第一次出现来分割过滤字符串并获取键、运算符、值

python - Pandas GroupBy,将新的数字列表列与另一列数字列表进行比较

python - 求 A 的最高阶除以 N 的阶乘

python - 使用 kivy 更新多个标签

python - 探戈与 Django - Django 2.0

java - 对于在 ADODB 中反序列化值的特殊情况,我如何将 PHP preg_split 移植到 Java?

regex - Dart http请求用表达式语言操作一个网站

Java正则表达式(贪婪/非贪婪)

java - 空格分隔字符串java所需的正则表达式