Python - 如何使用DOTALL(或类似)正则表达式

时间:2017-05-18 13:28:05

标签: html regex python-2.7

我想找到某些HTML文本中某些点之间的所有术语,但是当我使用'。'在我的正则表达式中,它不包含新行。我试图研究这个,并在DOTALL上读了一些,但是在我的代码中找不到关于如何在物理上使用它的任何解释。提到了re.dotall,但我似乎无法在任何地方使用它。我试图使用替代版本的'。'包含新行的正则表达式运算符,但由于某种原因它只返回findall项的第一个实例。

这是我的Python文件:

.category.right .category-header .title {
      padding: 70px 0 70px 100px; /* for vertical align middle */
      text-align: right;
      float: right; /* to be placed on right side */
    }

上面这行应该提供所有图像URL,它们表示div class = grid和div class = orderplacebut。但它只返回一个图像URL(第一个)注意:上面两行代码是编辑器中的一行。

from urllib import urlopen
from re import findall

dennisov_url = 'https://denissov.ru/en/'
dennisov_html = urlopen(dennisov_url).read()

watch_image_urls = findall('<div class="grid"[\s\S]*?<img.* src="([^"]+)".*
[\s\S]*?<div class="orderplacebut', dennisov_html)

有人能请教我如何在我的代码中使用DOTALL功能(特别是),或解释为什么[\ s \ S] *?正则表达式运算符只提供一个URL?

更新:我现在已将DOTALL正则表达式合并到代码中而不是([^&#34;] +),但它仍然只返回一个URL(现在是最后一个)

1 个答案:

答案 0 :(得分:0)

要使用re.DOTALL运算符,只需将其作为标志发送到findall

import re

# code 
# code
watch_image_urls = findall('<div class="grid"[\s\S]*?<img.* src="([^"]+)".*
[\s\S]*?<div class="orderplacebut', dennisov_html, flags=re.DOTALL)

仅供参考,要使用多个标志,请用OR分隔它们

flags = re.S | re.I

有关详细信息,请参阅re's documentation