首页 > 解决方案 > python re模块中split函数的空匹配

问题描述

我只是想知道结果中如何出现“第二个空字符串”。谁能告诉我一步一步发生了什么?

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

如果我没记错的话,第一个空匹配是因为 python re 模块文档中的这句话:

如果它在字符串的开头匹配,则结果将以空字符串开头。这同样适用于字符串的结尾

标签: pythonregex

解决方案


请参阅regex101 上的正则表达式演示在此处输入图像描述。它显示匹配发生的位置。现在,回想一下re.split使用匹配值拆分字符串(这里是空字符串,字符串中的位置),您可以很容易地看到拆分发生的位置:

  • ...找到并发生分裂 =>['', 'words...']
  • w找到了,所以匹配它前面的\W*空白=>['', '', 'words...']
  • o找到了,所以匹配它前面的\W*空白=>['', '', 'w', 'o', 'rds...']
  • r找到了,所以匹配它前面的\W*空白=>['', '', 'w', 'o', 'r', 'ds...']
  • d找到了,所以匹配它前面的\W*空白=>['', '', 'w', 'o', 'r', 'd', 's...']
  • s找到了,所以匹配它前面的\W*空白=>['', '', 'w', 'o', 'r', 'd', 's', '...']
  • 找到了...,所以\W*匹配 => ['', '', 'w', 'o', 'r', 'd', 's', ''](注意最后一个''不只是空字符串,它是一个空字符串,它仍然可以匹配到字符串末尾的位置)
  • 找到字符串的结尾,因此\W*匹配此位置 => ['', '', 'w', 'o', 'r', 'd', 's', '', '']

推荐阅读