代码:
import re
re_split_list = re.split(r'(\W*)', '...words...')
print(re_split_list, type(re_split_list), len(re_split_list))
实际产量:
['', '...', '', '', 'w', '', 'o', '', 'r', '', 'd', '', 's', '...', '', '', ''] <class 'list'> 17
根据@jonrsharpe提供的资源(https://regex101.com/r/m857F0/1 [1]),我期望得到以下输出。
预期输出:
['', '...', '', 'w', '', 'o', '', 'r', '', 'd', '', 's', '...', ''] <class 'list> 14
所以我更新的问题是,是什么功能导致索引3(元素4)、15和16处的空字符串被添加到python re. split返回的子字符串列表中?为什么在'...'和'w'之间有两个空字符串而不是一个空字符串(如在regex模拟器[https://regex101.com/r/m857F0/1][1]中所见)?为什么在第二个省略号'...'和输入字符串末尾匹配的空字符串之间有两个空字符串(也在regex模拟器中可见)?从方法调用到输出应用了什么规则?
链接:
[1]:https://regex101.com/r/m857F0/1
其他参考文献:
https://docs.python.org/3/library/re.html#functions
1条答案
按热度按时间erhoui1w1#
split
调用在输入字符串"... words..."的以下位置匹配给定的正则表达式:......总共8场比赛。
这是
findall
在相同参数下得到的8个匹配项:现在,在
split
版本中,这些匹配项是通过捕获组捕获的,因此它们会出现在结果列表中的奇数索引处。出现在匹配字符串 * 之间 * 的部分将在结果中的 * 偶数 * 索引处结束:由于奇数索引有8个匹配项,因此结果列表中总共有8 * 2 + 1 = 17个元素,这有时会包括来自输入字符串中 * same * 位置的空字符串,但当这种情况发生时,它们位于 * empty * 分隔符的交替两侧(也在该位置)。