找到一个由三个大写字母组成的小写字母

Nic*_*ung 1 python regex string

我有一个混合了大写和小写字母的字符串.我需要找到每个由3个大写字母包围的小写字母,并从字符串中提取它.

例如,ZZZaZZZ我想a在前一个字符串中提取.

我写了一个能够提取ZZZaZZZ但不能a单独提取的脚本.我知道我需要使用嵌套的正则表达式来执行此操作但我不能完全理解如何实现它.以下是我所拥有的:

import string, re                                                                                                                                                                

if __name__ == "__main__":                                                                                                                                                       

    #open the file                                                                                                                                                               
    eqfile = open("string.txt")                                                                                                                                                
    gibberish = eqfile.read()                                                                                                                                                    
    eqfile.close()                                                                                                                                                               

    r = re.compile("[A-Z]{3}[a-z][A-Z]{3}")                                                                                                                                      
    print r.findall(gibberish)           
Run Code Online (Sandbox Code Playgroud)

编辑: 谢谢你的答案!我想我应该更具体一点.我需要找到由三个完全相同的大写字母包围的小写字母,例如在我的示例中ZZZaZZZ.

Kir*_*ser 5

真是太近了!阅读MatchObjects.group*方法.例如,如果您的脚本以.结尾

r = re.compile("[A-Z]{3}([a-z])[A-Z]{3}")
print r.match(gibberish).group(1)
Run Code Online (Sandbox Code Playgroud)

然后你将捕获第一组内的所需角色.

要解决匹配重复字母的新约束,可以使用反向引用:

r = re.compile(r'([A-Z])\1{2}(?P<middle>[a-z])\1{3}')
m = r.match(gibberish)
if m is not None:
    print m.group('middle')
Run Code Online (Sandbox Code Playgroud)

这看起来像:

  1. 匹配字母AZ并记住它.
  2. 匹配找到的第一个字母的两次出现.
  3. 匹配您的小写字母并将其存储在名为的组中middle.
  4. 匹配找到的第一个字母的三个连续实例.
  5. 如果找到匹配项,则打印该middle组的值.