我试图解决challenge以便在给定字符串中找到某种模式的问题。我想到的第一个想法是遍历角色并找到图案。
(“压力”主题行表示所有字母均为大写字母,并且/或者以至少3个感叹号结尾,并且/或者包含以下“红色”字词中的至少一个:“ help”,“ asap那些“红色”字词可以用不同的方式拼写-“帮助”,“帮助”,“帮助”,“ H!E!L!P!”,“帮助”,甚至非常宽松的方式“ HHHEEEEEEEEELLP”)
有人为此提交了以下代码,但我不知道发生了什么。如何运作?
return (subj.isupper() or
subj.endswith('!!!') or
any(re.search('+[.!-]*'.join(c for c in word), subj.lower())
for word in ['help', 'asap', 'urgent']))
答案 0 :(得分:2)
这段代码只是检查3个条件是否满足,
如果每个字符都大写,则第一个sub.isupper()
返回True
第二个subj.endswith('!!!')
检查单词是否以!!!
第三种方法是使用正则表达式匹配红字,并使用方法any
检查是否有任何红字匹配
对于每个red word
(for word in ['help', 'asap', 'urgent']
),该单词均以小写形式转换,并用于生成正则表达式。
例如'+[.!-]*'.join(c for c in 'help')
给出h+[.!-]*e+[.!-]*l+[.!-]*p
,该单词检查单词的每个字母,重复所需的次数,所有字母都用.
,!
分隔或-
任意多次。
最后,如果生成器的布尔值是any
,则True
返回True
。因此,如果正则表达式匹配任何红色单词。
答案 1 :(得分:1)
如果我们以“帮助”一词为例:
subj.isupper()
如果subj="HELP"
subj.endswith('!!!')
如果subj="help!!!"
subj.lower()
强制将字符串转换为小写字母subj="HelP"
-> subj="help"
re.search('+[.!-]*'.join(c for c in word)
连接/删除相同字符的出现,例如,它将“ heeellp”转换为“ help”