Python挑战等级3解释(警告破坏者!)

时间:2012-06-05 13:55:09

标签: python regex

我正在进行Python挑战,当我想出一个谜题的答案时,我是以一种hacky,不是很好的方式做到的。推进后,我能够看到解决方案:

string1 = open('text.txt').read()
print ''.join(re.findall('[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]', string1))

我搞砸了一段时间,在这里删除一个插入符号,看看会发生什么,在那里改变一个支撑组。但是,我无法理解为什么这样做。任何人都可以用一种易于理解的方式解释它吗?

谢谢!

3 个答案:

答案 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']