繁体   English   中英

Python RE re.split(),结果以空字符串开头

[英]Python RE re.split(), results start with empty string

我对Python RE文档中的split()描述/示例有一些疑问

如果分隔符中有捕获组,并且该匹配组在字符串的开头匹配,则结果将从空字符串开始。 字符串的末尾也是如此:

re.split(r'(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']

在此示例中,有一个捕获组,它在字符串的开头和结尾匹配,因此,结果以空字符串开头和结尾。 除了了解发生这种情况之外,我想更好地理解其原因。 对此的解释是:

这样,分隔符组件总是在结果列表中的相同相对索引中找到。

有人可以对此进行扩展吗? 相对于什么?

我的其他查询与此示例有关:

re.split(r'(\W*)', '...words...')
['', '...', '', '', 'w', '', 'o', '', 'r', '', 'd', '', 's', '...', '', '', '']

\\w将匹配可以在任何语言的任何单词中使用的任何字符(Flag:unicode),或者与[a-zA-Z0-9_] (Flag:ASCII)等效, \\W是该字符的反函数。 有人可以谈谈上面示例中的每个匹配项,是否可以根据匹配项(\\ B,\\ U,...)来解释每个匹配项(如果可能)。

添加的29/01/2019:

我所追求的部分内容并没有说得很清楚(我的错)。 就第二个示例而言,我很好奇要采取哪些步骤才能得出结果(python re模块如何处理示例)。 在阅读了有关零长度正则表达式匹配的文章后,事情变得更清楚了,但是如果有人可以将逻辑分解为['', '...', '', '', 'w', in结果。

它试图说的是,当您在定界符中有一个捕获组并且它与字符串的开头匹配时,结果列表将始终以定界符开头。 同样,如果它在字符串的末尾匹配,则列表将始终以定界符结尾。

为了保持一致,即使分隔符与空字符串匹配也是如此。 输入字符串被认为在第一个字符之前和最后一个字符之后具有空字符串,并且分隔符将匹配这些字符串。 然后它们将成为结果列表的第一个和最后一个元素。

检查一下:

>>> re.split('(a)', 'awords')
['', 'a', 'words']
>>> re.split('(w)', 'awords')
['a', 'w', 'ords']
>>> re.split('(o)', 'awords')
['aw', 'o', 'rds']
>>> re.split('(s)', 'awords')
['aword', 's', '']

始终排在第二位(索引为1)。

另一方面:

>>> re.split('a', 'awords')
['', 'words']
>>> re.split('w', 'awords')
['a', 'ords']
>>> re.split('s', 'awords')
['aword', '']

几乎相同,只是捕获组不在内部。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM