如何检查字符串在Python中恒定单词之上是否至少有1个单词变体?

时间:2018-10-10 16:12:10

标签: python regex web-scraping

因此,我的脚本拉扯了网站上列出的产品标签,而我一直在不停地寻找一种我知道具有该特定关键字和另一个时而在拼写上有所不同的关键字的产品。关键字常量为'blazer',另一个变量关键字为'10'或'ten'。这是查找标题中包含“ blazer”和“ 10”或“ ten”的标题的正确方法吗?

- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset

所以我希望函数在字符串变量compareName同时具有'blazer'和'ten'或'blazer'和'10'的情况下运行

3 个答案:

答案 0 :(得分:1)

'ten' or '10' in compareName部分不会为您提供所需的结果。每次都会返回“十”!相反,您需要检查“ compareName”中是否包含“十”,并且要比较的名称中是否包含“ 10”,然后将或放在两者之间,如下所示:

if 'blazer' in compareName and ('ten' in compareName or '10' in compareName):

答案 1 :(得分:0)

我敢肯定,有一种更好的方法,只是维护您的语法并给出正确答案,if语句应该是

if 'blazer' in compareName and ('ten' in compareName or '10' in compareName):
    func()
else:
    pass

答案 2 :(得分:0)

您似乎对编程的工作原理有基本的误解。我强烈建议您在继续之前先阅读Comparisons

此声明:

if 'blazer' in compareName and 'ten' or '10' in compareName:

本质上评估为:

if (('blazer in compareName) == True) and ('ten' == True) or (('10' in compareName) == True):

假设compareName是'blazerten',它将计算为:

if True and True or False:

# Note: Python evaluates OR before AND operators

# Result: True

看起来不错吗?不!如果compareName是'blazer',它将评估同一事物。由于第二个条件'ten'并非空字符串,因此总会得出True的值,因此,一旦满足第一个条件,第二个条件和第三个条件就没有意义了。

正确的方法是提到其他答案,您需要分别做一个比较:

if 'blazer' in compareName and 
   'ten' in compareName or 
   '10' in compareName:

注意:如果您遵守operation precedence.

,则不需要括号。

如果您喜欢冒险,又不想过多重复自己的话,可以尝试以列表理解的方式表达这一点:

if 'blazer' in compareName and
   any([part in compareName for part in ['ten', '10']]):

第二个条件现在由any() function处理。当然,需要注意的是,您放弃了一些可读性。不过,这样做的好处是,如果您需要在OR子句中不只比较'ten''10',还可以简单地将其添加到第二个条件的列表中。