我正在进行Python挑战,当我想出一个谜题的答案时,我是以一种hacky,不是很好的方式做到的。推进后,我能够看到解决方案:
string1 = open('text.txt').read()
print ''.join(re.findall('[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]', string1))
我搞砸了一段时间,在这里删除一个插入符号,看看会发生什么,在那里改变一个支撑组。但是,我无法理解为什么这样做。任何人都可以用一种易于理解的方式解释它吗?
谢谢!
答案 0 :(得分:2)
([a-z])
会抓一封小写字母。
[A-Z]{3}
匹配3个大写字母(两边)。
[^A-Z]
确保没有第4个大写字母(“EXACTLY three”)。
答案 1 :(得分:2)
[^ A-Z]不是大写字母的字符
[A-Z] {3}三个大写字母
([a-z])您匹配的小写字母
重复前两个。
答案 2 :(得分:2)
我将模式编译为详细信息以包含内联注释:
pat = re.compile('''
[^A-Z] # any character except a capital letter
[A-Z]{3} # three capital letters
( # the beginning of a capturing group
[a-z] # one lowercase letter
) # the end of the group
[A-Z]{3} # three capital letters
[^A-Z] # any character except a capital letter
''', re.VERBOSE)
演示:
>>> re.findall(pat, 'AAAAaBBBbBBBBzzZZZxXXXyYYYYwWWWvABCn')
['x', 'v']