我有一个混合了大小写字母的字符串。我需要找到被 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')
内容如下:
- 匹配一个字母 A-Z 并记住它。
- 匹配找到的第一个字母的两次出现。
- 匹配你的小写字母并将其存储在名为
middle的组中。 - 匹配找到的第一个字母的三个以上连续实例。
- 如果找到匹配项,则打印
中间组的值。
