【问题标题】:Why re.split() keeps delimiter and split() doesn't [duplicate]为什么 re.split() 保留分隔符而 split() 不[重复]
【发布时间】:2020-07-17 05:58:39
【问题描述】:

在拆分String 时,我使用regex 发现了不同的结果。考虑以下示例 -

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

# result
# ['black', 'white']
  1. using re.split() using this regex- ([.] *) 给了我一个list 包括分隔符 - .
var3 = "black.white"
print(re.split('([.] *)', var3))

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

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

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

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

注意:我是 pythonregex 的新手

【问题讨论】:

  • 括号在正则表达式中定义了捕获组,因此当您将表达式放在括号中时 - 您定义它必须被捕获。
  • 这就是re.split API 的工作原理。如果您在分隔符周围放置一个捕获组,那么 Python 将保留它。顺便说一句,这里真正分裂的正则表达式模式只是([.]) ...没有使用空格。
  • @TimBiegeleisen 你的计划的话解释了很多与官方文档相比!

标签: python regex split


【解决方案1】:

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

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

 

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

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

 

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

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

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

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

 

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

【讨论】:

    猜你喜欢
    • 2013-02-01
    • 1970-01-01
    • 2012-09-12
    • 2011-12-13
    • 2014-02-24
    • 2015-10-25
    • 2014-03-18
    • 2013-09-10
    相关资源
    最近更新 更多