我有一个混合了大写和小写字母的字符串 . 我需要找到每个由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)
EDIT: 谢谢你们的答案!我想我应该更具体一点 . 我需要找到由三个完全相同的大写字母包围的小写字母,例如在我的示例中 ZZZaZZZ
.
3 回答
您需要使用括号捕获您感兴趣的字符串部分,然后使用
re.MatchObject#group
访问它:(?<=...)
表示积极的外观,(?=...)
是一个积极的前瞻 .module re
你真是太近了!阅读MatchObjects的
.group
*方法 . 例如,如果您的脚本以 . 结尾然后你将在第一组内捕获所需的角色 .
要解决匹配重复字母的新约束,可以使用反向引用:
这就是:
匹配字母A-Z并记住它 .
匹配找到的第一个字母的两次出现 .
匹配您的小写字母并将其存储在名为
middle
的组中 .匹配找到的第一个字母的三个连续实例 .
如果找到匹配项,则打印
middle
组的值 .