Skip to main content
 首页 » 编程设计

python之找到一个被三个大写字母包围的小写字母

2025年05月04日12java哥

我有一个混合了大小写字母的字符串。我需要找到被 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)            

编辑: 谢谢你们的回答!我想我应该更具体一些。我需要找到被完全相同的三个大写字母包围的小写字母,例如我的示例 ZZZaZZZ。

请您参考如下方法:

你太了!了解 MatchObjects 的 .group* 方法.例如,如果您的脚本以

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

然后您将在第一组中捕获所需的字符。

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

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') 

内容如下:

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