python - python re模块中split函数的空匹配
问题描述
我只是想知道结果中如何出现“第二个空字符串”。谁能告诉我一步一步发生了什么?
>>> re.split(r'\W*', '...words...')
['', '', 'w', 'o', 'r', 'd', 's', '', '']
如果我没记错的话,第一个空匹配是因为 python re 模块文档中的这句话:
如果它在字符串的开头匹配,则结果将以空字符串开头。这同样适用于字符串的结尾
解决方案
请参阅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', '', '']
。
推荐阅读
- javascript - 突出显示焦点上的文本 - 剑道组合框
- sql-server - 在 Microsoft SQL 中是否有一个现有的存储过程来列出架构的所有表?
- php - ID 未保存到数据库
- wpf - 在 Avalon dock 中,LayoutAnchorable WPF 应用程序没有出现 Title 和 Dock 组合按钮选项
- abap - 显示两个用户的角色?
- python-3.x - 在 sympy 中替换具有不确定性的值
- r - 如何减少 ggplot2 bquote 标签标题中 unicode 字符之间的空格?
- r - R:根据两个data.tables的多列值匹配替换多个值
- bootstrap-4 - 如何在没有 CSS 的情况下增加 bootstrap 4 中的单选按钮大小
- java - ReferencedColumnName 似乎在休眠中不起作用