【问题标题】:String fails to match by and or, by "in" search [duplicate]字符串无法通过 and 或“in”搜索匹配 [重复]
【发布时间】:2025-11-30 09:50:01
【问题描述】:

字符串在搜索中无法通过 and or 匹配。为什么?

string = 'This is some text with an email add: myusername@domain.com'
a = re.findall('[\w]+@[\w]+\.[\w]{3}',string)
b = string.split(' ')
print (a)
print (b)

if a==b:
    # also tried: if a in b:
    print(a, ' yes it is found')
else:
    print('not !?!?!')
['myusername@domain.com']
['This', 'is', 'some', 'text', 'with', 'an', 'email', 'add:', 'myusername@domain.com']
not !?!?!

【问题讨论】:

    标签: python regex


    【解决方案1】:

    ab 都是列表。他们不相等。而a 不是b 的元素。 b 只包含字符串,不包含列表。

    如果要检查a中包含的单个字符串是否也包含在b中,可以这样做:

    if a[0] in b:
        print("Yes, a[0] is in b")
    

    一般来说,如果你想检查一个列表的任何元素是否包含在另一个列表中,有多种方法可以做到,但这里有一种:

    if any(element in b for element in a):
        print("Some element of a is in b")
    

    【讨论】:

    • 好的。谢谢你。我不知道即使对于单个对象,拆分也会返回一个列表。
    • 打印出来时会显示[ ],因此您可以判断它是一个列表。
    • 是的。并且 rgex 返回单个对象的列表。我不知道。
    【解决方案2】:

    a 不等于 b,所以它永远不会出现在 if 语句中,你应该遍历一个列表并将其元素与另一个列表进行比较,如下所示

    import re
    
    string = 'This is some text with an email add: myusername@domain.com'
    a = re.findall('[\w]+@[\w]+\.[\w]{3}',string)
    b = string.split(' ')
    print (a)
    print (b)
    
    for aa in a:
        if aa in b: # tried
            print(a, ' yes it is found')
    else:
        print('not !?!?!')
    

    【讨论】: