带迭代器的正则表达式

时间:2018-11-19 10:41:57

标签: regex python-3.x

我正试图从网上商店中砍价。我正在遍历页面上的产品,并将其包含在正则表达式中。尽管转义了大括号,但正则表达式不起作用。 (findall返回一个空列表)

汤.findall返回的HTML代码:

[<div class="ps4-price at-min-price-1"> from 29 GBP </div>]
[<div class="ps4-price at-min-price-2"> from 35 GBP </div>]

Python代码:

for product in range(21):

        min_prices_text = str(soup.findAll("div", class_="ps4-price at- 
        min- price-{}".format(product)))

        min_price = re.findall('<div class="ps4-price at-min-price- 
        {{}}"> (.+?)<'.format(product), str(min_prices_text))

1 个答案:

答案 0 :(得分:0)

您可以访问通过.string获得的元素的findAll属性,并且仅将正则表达式应用于纯文本。例如,由于您只希望在那里有一个整数,因此可以在这些字符串上应用re.sub(r'\D+', '', min_prices_text.string)

查看示例代码:

results = []
for product in range(21):
    min_prices_text = soup.find("div", class_="ps4-price at-min-price-{}".format(product))
    if min_prices_text:
        results.append(re.sub(r'\D+', '', min_prices_text.string))

print(results) # => ['29', '35']

或者如果您要将字符串列表转换为整数,请使用list(map(int, results))