【问题标题】:Stricter if statement using regex/beautifulsoup?使用 regex/beautifulsoup 的更严格的 if 语句?
【发布时间】:2013-11-01 01:54:15
【问题描述】:

我正在寻求一些帮助,使我的 if 语句在这篇文章的底部“更严格”,这样它就不会意外返回错误的数据。

打印 details

<li class="">
<span class="prefix">Student Discount</span>
                £2922.70                </li>
<li class="">
<span class="prefix">Student DiscountX</span>
                5499.99                </li>

打印细节

<li class="">
<span class="prefix">Student Discount</span>
                £2922.70                </li>

打印 unicode(详细)

<li class="">
<span class="prefix">Student Discount</span>
                £2922.70                </li>

BeautifulSoup 代码片段

details = details_section.findAll('li', {"class":"full"})
for detail in details:
    if detail.find(text=re.compile("Student Discount")):
        SD = detail.get_text().replace("Student Discount", "").strip().replace(u"£", "POUNDSIGNHERE")
        SD = "Student Discount {}".format(detail.get_text().replace("Student Discount", "").strip().replace(u"£", "POUNDSIGNHERE"))
        if not "Student Discount POUNDSIGNHERE" in result_SF:
            SD = "Student Discount POUNDSIGNHERE{}".format(detail.get_text().replace("Student Discount", "").strip().replace(u"£", "POUNDSIGNHERE"))  
        print SD

输出

SF POUNDSIGNHERE2922.70
SF POUNDSIGNHERE5499.99

如您所见,我已经解决了每个细节中空格/制表符过多的问题,并且我已将磅符号替换为 POUNDSIGNHERE,以便稍后当我需要它时,我所要做的就是将其替换为井号。

我正在发帖寻求帮助:
if detail.find(text=re.compile("Student Discount")):
类似于:
if detail.find(text=re.compile('&lt;span class="prefix"&gt;Student Discount&lt;/span&gt;')):
甚至:
if detail.find(text=re.compile('&gt;Student Discount&lt;')):

我想让 if 语句更严格,这样它就不会潜在地拾取如下行:

<li class="">
<span class="prefix">Student Discount Old</span>
                £2922.70                </li>

任何想法、建议或想法将不胜感激。

【问题讨论】:

  • 您的示例代码似乎不完整,result_SF 没有定义?

标签: python regex python-2.7 if-statement beautifulsoup


【解决方案1】:

只使用一个正则表达式。使用剥离、替换等是不必要的,并且像这样链接它们会令人困惑。

import re
details = details_section.findAll('li', {"class":"full"})
for detail in details:
    detail_text = detail.get_text()
    m = re.match(r"\s*Student Discount\s+£\s*(\d+\.\d+)\s*", detail_text)
    if m:
        discount_value = m.group(1)
        print "discount = " + discount_value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2021-02-13
    • 2012-12-22
    • 2014-06-07
    • 2019-03-22
    • 2015-05-09
    相关资源
    最近更新 更多