Python挑战3级解释(警告破坏者!)
我正在进行Python挑战,虽然我找到了一个谜题的答案,但我用了一种不太好的方式。推进后,我能够看到解决方案,即: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)) 我把这个弄得一团糟,在这里去掉一个插入符号,看看会发生什么,在那里换一个带括号的组。然而,我就是不明白为什么这样做有效。有人能用一种简单易懂的方式解释一下吗 谢谢大家
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