为什么any()方法没有返回我认为应该返回的内容?

时间:2019-04-09 22:05:40

标签: python

我正在尝试建立一个自动删除邮件的机器人,如果邮件中包含来自正文列表中的特定字符串。

此代码完全按照我的想法工作:(返回True)

s = 'test upvote test'
upvote_strings = ['upvote', 'up vote', 'doot']
print(any(x in s for x in upvote_strings))

但这不是:(返回False)

s = 'your upvotе bot thing works fine lmao'
upvote_strings = ['upvote', 'up vote', 'doot']
print(any(x in s for x in upvote_strings))

1 个答案:

答案 0 :(得分:7)

其中一个e不是ASCII:

>>> import unicodedata
>>> unicodedata.name(s[10])
'CYRILLIC SMALL LETTER IE'
>>> unicodedata.name(upvote_strings[0][-1])
'LATIN SMALL LETTER E'

unidecode可以帮助您

>>> e1 = s[10] 
>>> e2 = upvote_strings[0][-1] 
>>> e1 == e2 
False
>>> from unidecode import unidecode
>>> unidecode(e1) == "e" == unidecode(e2)
True