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

如何在Python中查找同一单词中的重复字母?,python,python-3.x,Python,Python 3.x,我试图解决在给定字符串中寻找某种模式的问题。我想到的第一个想法是在人物身上循环并找到模式 有压力的主题行表示所有字母都是大写,和/或以至少3个感叹号结尾,和/或至少包含以下一个“红色”单词:帮助、尽快、紧急。这些红色单词中的任何一个都可以用不同的方式拼写——帮助,帮助,帮助,H!ELPH-E-L-P,甚至以一种非常疯狂的方式 有人提交了下面的代码,我不明白发生了什么。这是怎么回事 return (subj.isupper() or subj.endswith('!!!') or

我试图解决在给定字符串中寻找某种模式的问题。我想到的第一个想法是在人物身上循环并找到模式

有压力的主题行表示所有字母都是大写,和/或以至少3个感叹号结尾,和/或至少包含以下一个“红色”单词:帮助、尽快、紧急。这些红色单词中的任何一个都可以用不同的方式拼写——帮助,帮助,帮助,H!ELPH-E-L-P,甚至以一种非常疯狂的方式

有人提交了下面的代码,我不明白发生了什么。这是怎么回事

return (subj.isupper() or
    subj.endswith('!!!') or
    any(re.search('+[.!-]*'.join(c for c in word), subj.lower())
        for word in ['help', 'asap', 'urgent']))

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

如果subj=HELP,则subj.isupper返回true

主题:结束语如果sub=help,则返回true

subc.lower将字符串强制为小写的subc=HelP->subc=HelP


重新搜索“+[!-]*”。joinc for c在word中连接/删除相邻相同字符的出现,例如,它会将heeellp转换为help

此代码只是检查是否满足3个条件中的任何一个

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

第二个主题是“!!!”检查单词是否以结尾

第三种方法是使用正则表达式匹配红色单词,并使用any方法检查是否匹配任何红色单词

部分地 对于['help'、'asap'、'Emergency']中的每个红色单词,该单词将以小写形式转换,并用于生成正则表达式

正则表达式部分 例如,“+[!-]*”。在“帮助”中,joinc For c给出了h+[!-]*e+[!-]*l+[!-]*p,它检查单词的每个字母,根据需要重复多次,并且所有字母都用其中一个分隔!或者——想要多少次就多少次

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

你问题中的要求似乎与你的问题标题不完全一致。问题的重点是什么?你想找到什么?我认为它无法匹配最后一个字符的重复,比如urgenttt。@RemcoGerlich是的,它确实失败了,因为+并不贪婪,但我认为匹配它并不重要,因为它返回了真值:@BlueSheepToken:啊,对,它将只匹配“紧急”,并且有更多的字符是不相关的,没有想到这一点。@Tim Biegeleisen,如果标题有误导性,很抱歉,提交的代码旨在查找某些单词中重复的字符。我主要是想找到代码第三部分的解释。Thx@BlueSheepToken,regex部分是个谜,但现在已经清楚了。