正则表达式模式 \W* 匹配字符串中的空字符串

问题描述 投票:0回答:1

开始 进口重新 print(re.split(r'\W*', '...单词...')) 结束

上述Python代码的输出是: [''、''、'w'、'o'、'r'、'd'、's'、''、'']

在上面给出的输出中,列表中的最后两项为何是空字符串?

我期望输出为 ['', '', 'w', 'o', 'r', 'd', 's', '']

我对预期输出的解释如下:

  1. \W* 匹配 '...' 并且字符串分裂。返回的字符串是空字符串('')。结果列表是['']。 2.\W* 不匹配非单词字符,即 '...' 和 's' 之间的空字符串 (''),并且字符串在此处拆分。返回的字符串是空字符串,尚未扫描到非单词字符。结果列表是 ['', '']
  2. \W* 与 'w' 不匹配。
  3. \W* 匹配 'w' 和 'o' 之间的空字符串,并且字符串在此处拆分。返回的字符串是“w”。结果列表是 ['', '', 'w'] ... ...
  4. \W* 匹配 's' 和 end_of_string_ 之间的 '...' 并且字符串拆分。返回的字符串是's'。结果列表是 ['', '', 'w', 'o', 'r', 'd', 's']
  5. \W* 匹配 '...' 和 end_of_string_ 之间的 '' 以及字符串拆分。返回的字符串是''。结果列表是 ['', '', 'w', 'o', 'r', 'd', 's', '']
python python-3.x regex pattern-matching regex-greedy
1个回答
0
投票

让我们分解一下

W
文字字符、字母数字
A-Z
a-z
0-9
_

\
不是

*
零次或多次出现

将三者结合起来:

\W*
:零次或多次出现非单词字符

这是一个例子

>>> re.split(r'\W*', ".....")
['', '', '']

它匹配了两次出现:

  1. "....."
    :5 个非单词字符
  2. ""
    : 0 个非单词字符

导致分裂(用

x
表示):

"x(.....) x"

给予

['', '', '']

因此你的解释是正确的。是的

\W*
确实匹配
""
和字符串结尾
之间的空字符串 
...

© www.soinside.com 2019 - 2024. All rights reserved.