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

时间:2019-01-28 10:27:52

标签: python regex

我对Python RE documents

中的split()描述/示例有一些疑问
  

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

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

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

  

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

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

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

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

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

添加了2019年1月29日:

我所追求的一部分并没有说得很清楚(我的坏话)。就第二个示例而言,我很好奇要采取哪些步骤才能得出结果(python re模块如何处理示例)。阅读关于Zero-Length Regex Matches的帖子后,事情变得更清楚了,但是如果有人可以分解结果中的逻辑['', '...', '', '', 'w',,我仍然会很感兴趣。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

检查:

>>> 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', '']

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