我试图解决一个challenge在给定字符串中寻找某种模式的问题。我想到的第一个想法是在字符上循环并找到模式。在
(“压力”主题行表示所有字母都是大写字母,和/或结尾至少有3个感叹号,和/或至少包含以下一个红色单词:“帮助”、“尽快”、“紧急”。任何一个红色的单词都可以用不同的方式拼写-“HELP”,“HELP”,“HELP”,“H!E!我!P!““H-E-L-P”,甚至用一种非常粗俗的方式“Hhheeeeeeellp”)
有人提交了下面的代码,我不明白是怎么回事。这是怎么回事?在
return (subj.isupper() or
subj.endswith('!!!') or
any(re.search('+[.!-]*'.join(c for c in word), subj.lower())
for word in ['help', 'asap', 'urgent']))
此代码只是检查是否满足3个条件中的任何一个
第一个
sub.isupper()
如果每个字符都是大写的,则返回True
第二个
subj.endswith('!!!')
检查单词是否以!!!
结尾第三种方法是使用正则表达式匹配红色单词,并使用
any
方法检查是否匹配了红色单词第3部分>
对于每个
red word
(for word in ['help', 'asap', 'urgent']
),该单词将以小写形式转换并用于生成正则表达式。在正则表达式部分
例如,}分隔。在
'+[.!-]*'.join(c for c in 'help')
给出h+[.!-]*e+[.!-]*l+[.!-]*p
,它检查单词的每个字母,根据需要重复多次,并且所有字母按需要用.
、!
或{任何部分
最后,}。所以如果正则表达式匹配任何红色单词。在
any
如果生成器的任何布尔值是True
,则返回{如果我们以“帮助”这个词为例:
subj.isupper()
如果subj="HELP"
,则返回truesubj.endswith('!!!')
如果subj="help!!!"
,则返回truesubj.lower()
强制将字符串转换为小写subj="HelP"
->;subj="help"
re.search('+[.!-]*'.join(c for c in word)
连接/删除相邻的相同字符,例如,它将把“heeellp”转换为“help”相关问题 更多 >
编程相关推荐