首页 > 解决方案 > Web Scrape - Python - 如果字符串中的“文本”然后字符串 =“文本”问题 - 冲突的命令?

问题描述

我有一个不寻常的

也许在 python 中有不同的" "含义?' '

这个例子是这样的:

calibre = soup.select_one('h1[itemprop="name"]')
gun_calibre = calibre.text if calibre else ''
if "410 Gauge" in gun_calibre:
    gun_calibre = gun_calibre.replace(gun_calibre,"410 Gauge")
if "10 Gauge" in gun_calibre:
    gun_calibre = gun_calibre.replace(gun_calibre,"10 Gauge")

在上面的示例中,如果我有字符串“Mossberg 410 Gauge shotgun”,python 会将其选为“10 Gauge”

我有其他地方我说过

gun_calibre = gun_calibre.replace(gun_calibre,".308")
if ".30" in gun_calibre:
gun_calibre = gun_calibre.replace(gun_calibre,".30")

因为.30在两个 if 语句中都有.308,它将被抓取为.30而不是.308.


标签: python

解决方案


你需要做两件事。首先是elif像@Oliver.R 提到的那样使用,但第二个是你必须从最严格的开始进行比较。

例如,如果您想匹配410 Gauge10 Gauge0 Gauge,则需要按照我提到的顺序进行比较。

if "410 Gauge" in gun_calibre:
    gun_calibre = gun_calibre.replace(gun_calibre,"410 Gauge")
elif "10 Gauge" in gun_calibre:
    gun_calibre = gun_calibre.replace(gun_calibre,"10 Gauge")
elif "0 Gauge" in gun_calibre:
    gun_calibre = gun_calibre.replace(gun_calibre,"0 Gauge")

但是,由于我们正在编程,所以让我们进行一些编程以使其更简单和可扩展。我们可以注意到,必须在较小的字符串之前检查较大的字符串,因此我们可以执行以下操作:

calibres = ['410 Gauge', '0 Gauge', '10 Gauge', '.30', '.308', '.22 LR', '.223']
sorted_calibres = sorted(calibres , key=len, reverse=True)

gun_calibre = ''
for calibre in sorted_calibres:
    if calibre in gun_calibre:
        gun_calibre = calibre
        break

推荐阅读