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

Python挑战3级解释(警告破坏者!),python,regex,Python,Regex,我正在进行Python挑战,虽然我找到了一个谜题的答案,但我用了一种不太好的方式。推进后,我能够看到解决方案,即: string1 = open('text.txt').read() print ''.join(re.findall('[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]', string1)) 我把这个弄得一团糟,在这里去掉一个插入符号,看看会发生什么,在那里换一个带括号的组。然而,我就是不明白为什么这样做有效。有人能用一种简单易懂的方式解释一下吗 谢谢大家

我正在进行Python挑战,虽然我找到了一个谜题的答案,但我用了一种不太好的方式。推进后,我能够看到解决方案,即:

string1 = open('text.txt').read()
print ''.join(re.findall('[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]', string1))
我把这个弄得一团糟,在这里去掉一个插入符号,看看会发生什么,在那里换一个带括号的组。然而,我就是不明白为什么这样做有效。有人能用一种简单易懂的方式解释一下吗

谢谢大家!

([a-z])
捕获单个小写字母

[A-Z]{3}
匹配3个大写字母(两侧)

[^A-Z]
确保没有第四个大写字母(“正好三个”)。

([A-Z])
捕获单个小写字母

[A-Z]{3}
匹配3个大写字母(两侧)


[^A-Z]
确保没有第四个大写字母(“正好三个”)。

[^A-Z]不是大写字母的字符

[A-Z]{3}三个大写字母

([a-z])匹配的小写字母


重复前两个。

[^A-Z]不是大写字母的字符

[A-Z]{3}三个大写字母

([a-z])匹配的小写字母


重复前两步。

我将模式编译为详细模式,以包含内联注释:

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)
演示:


我将模式编译为详细模式,以包含内联注释:

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)
演示:



请提供更多上下文。除非您完成了级别1和2,否则无法访问Python挑战级别3。挑战是什么?给出了什么数据?另外,更具体地说明你对正则表达式不理解的地方——也许解释一下你真正理解的地方。你下面的解释非常完美。非常感谢。令人沮丧的是,我似乎无法从python正则表达式文档中获得这一点。请提供更多上下文。除非您完成了级别1和2,否则无法访问Python挑战级别3。挑战是什么?给出了什么数据?另外,更具体地说明你对正则表达式不理解的地方——也许解释一下你真正理解的地方。你下面的解释非常完美。非常感谢。令人沮丧的是,我似乎无法从python正则表达式文档中获得这一点。这是从python重新文档中获得的:“^”(插入符号)匹配字符串的开头,在多行模式下,也会在每行换行后立即匹配。“为什么我无法理解要阅读的语言?”“插入符号表示我们正在搜索的不是这个?这来自Python文档:“^”(插入符号)匹配字符串的开头,在多行模式下,也会在每个换行符之后立即匹配。”为什么我不能理解要阅读的语言“插入符号表示我们正在搜索的不是这个?这来自Python文档:“^”(插入符号)匹配字符串的开头,在多行模式下,也会在每个换行符之后立即匹配。”为什么我不能理解要阅读的语言“插入符号表示我们正在搜索的不是这个?另外,它与“$”有什么关系?它与“$”匹配字符串的结尾或字符串结尾的换行符之前”?
^
(插入符号)在
[]
(方括号)中有不同的含义。方括号表示字符集。在文档中:“如果集合的第一个字符是“
^
”,则集合中不存在的所有字符都将匹配。”啊,是的!我现在看到在文档中,在[]下,它解释了插入符号在方括号内的行为。非常感谢您的精彩解释。这来自Python文档:“^”(插入符号)匹配字符串的开头,在多行模式下,也会在每行换行后立即匹配。“为什么我无法理解该语言来阅读”插入符号表示我们正在搜索的不是这个?另外,它与$“哪一个”匹配字符串的结尾或字符串结尾的换行符之前”?
^
(插入符号)在
[]
(方括号)中有不同的含义。方括号表示字符集。在文档中:“如果集合的第一个字符是“
^
”,则集合中不存在的所有字符都将匹配。”啊,是的!我现在看到在文档中,在[]下,它解释了插入符号在方括号内的行为。非常感谢您的精彩解释。
[A-Z]{3}([A-Z])[A-Z]{3}
这不就是说中间有一个小字母,两边有三个大字母吗?我不明白为什么要把它放进去there@HalcyonAbrahamRamirez因为小写字母应该正好被3个大写字母包围。删除
[^A-Z]
将允许超过3个大写字母。哦,好的,现在我知道了。如果是这样的话,那么解决方案是否也可以是
[a-z][a-z]{3}([a-z])[a-z]{3}[a-z]
?@HalcyonAbrahamRamirez
[a-z]
并不等同于
[^a-z]
(提示:数字)好的,我现在明白了。我不认为这个拼图中有数字,非常感谢你@Stefan
[A-Z]{3}([A-Z])[A-Z]{3}
,这不就是说中间有一个小字母,两边有三个大字母吗?我不明白为什么要把它放进去there@HalcyonAbrahamRamirez因为小写字母应该正好被3个大写字母包围。删除
[^A-Z]
将允许超过3个大写字母。哦,好的,现在我知道了。如果是这样的话,那么解决方案是否也可以是
[a-z][a-z]{3}([a-z])[a-z]{3}[a-z]
?@HalcyonAbrahamRamirez
[a-z]
并不等同于
[^a-z]
(提示:数字)好的,我现在明白了。我不认为那个拼图里有数字,无论如何,非常感谢你@Stefan