如何在Python中的同一单词中查找重复的字母?

时间:2019-03-14 10:46:20

标签: python python-3.x

我试图解决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']))

2 个答案:

答案 0 :(得分:2)

这段代码只是检查3个条件是否满足,

  • 如果每个字符都大写,则第一个sub.isupper()返回True

  • 第二个subj.endswith('!!!')检查单词是否以!!!

  • 结尾
  • 第三种方法是使用正则表达式匹配红字,并使用方法any检查是否有任何红字匹配

部分

对于每个red wordfor word in ['help', 'asap', 'urgent']),该单词均以小写形式转换,并用于生成正则表达式。

正则表达式部分

例如'+[.!-]*'.join(c for c in 'help')给出h+[.!-]*e+[.!-]*l+[.!-]*p,该单词检查单词的每个字母,重复所需的次数,所有字母都用.!分隔或-任意多次。

任何部分

最后,如果生成器的布尔值是any,则True返回True。因此,如果正则表达式匹配任何红色单词。

答案 1 :(得分:1)

如果我们以“帮助”一词为例:

subj.isupper()如果subj="HELP"

返回true

subj.endswith('!!!')如果subj="help!!!"

返回true

subj.lower()强制将字符串转换为小写字母subj="HelP"-> subj="help"

re.search('+[.!-]*'.join(c for c in word)连接/删除相同字符的出现,例如,它将“ heeellp”转换为“ help”