首页 > 解决方案 > 为什么 re.split() 保留分隔符而 split() 没有

问题描述

在拆分时String,我发现使用regex. 考虑以下示例 -

  1. usingstring.split()给了我一个list 排除分隔符-.
var3 = "black.white"
print(var3.split('.'))

# result
# ['black', 'white']
  1. 使用re.split()这个正则表达式 ([.] *)-给了我一个list 包括分隔符 -.
var3 = "black.white"
print(re.split('([.] *)', var3))

# result
# ['black', '.', 'white']
  1. re.split()与这个 则表达式一起使用-[.] *没有分组括号()给我一个list 排除分隔符 -.
var3 = "black.white"
print(re.split('[.] *', var3))

# result
# ['black', 'white']

我知道与分组括号有关(),但不明白为什么。因此,我想到了这三个问题-

  1. 为什么string.split()不保留分隔符
  2. 为什么要re.split()保留分隔符
  3. 为什么分组括号()regex有所不同

注意:我是python新手regex

标签: pythonregexsplit

解决方案


1.为什么string.split()不保留分隔符

因为这正是它应该做的决定。在大多数情况下,这通常比保留它更可取,例如,如果您想按空格分割单词。

 

2.为什么re.split()保留分隔符

它没有——模式中没有捕获组(用括号表示)。这反映了str.splitAPI。

 

3.为什么在正则表达式中分组括号()会有所不同

当您在正则表达式模式中放入括号中的内容时,它将成为“捕获组”。通常,这使您可以将正则表达式模式与字符串匹配,然后“捕获”该字符串的某些部分。例如,

re.match('h.llo, wo(.)ld!', 'hello, world!').group(1)

返回r(因为它在1st 捕获组中)。组 0 将始终是整个匹配的字符串,在这种情况下:hello, world!.

 

这只是 re.split 的一个(方便)功能,如果它们存在,它将在结果列表中包含捕获组。


推荐阅读