为什么要输出重新分割(“(\d)”,“SPL5IT THE WORDS”)与重新分割在python的正则表达式中使用('\d','SPL5IT THE WORDS')?

2024-09-28 05:27:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于Python中正则表达式的问题。我试着把结果打印出来重新分割('(\d)''SPL5IT THE WORDS')和重新分割('\d','SPL5IT THE WORDS')。结果如下:

re.split('\d', 'SPL5IT THE WORDS')
Out[20]: ['SPL', 'IT THE WORDS']

re.split('(\d)', 'SPL5IT THE WORDS')
Out[21]: ['SPL', '5', 'IT THE WORDS']

为什么第二个返回分离器,而第一个不返回?在


Tags: thereitoutsplsplitwords分离器
1条回答
网友
1楼 · 发布于 2024-09-28 05:27:38

因为这就是文档的前两行it's documented to do中的内容(添加了重点):

Split string by the occurrences of pattern. If capturing parentheses are used in pattern, then the text of all groups in the pattern are also returned as part of the resulting list.

特性本身的“原因”是,有时您希望知道捕获了什么,特别是当使用更复杂的模式时,它可以匹配所有类型的内容,并且您可能需要根据分割序列来调整代码。在

举个最简单的例子,如果你想在一个句子中改变某些单词(以一种非常复杂的方式,以至于re.sub不是一个合理的选择),那么重新构造句子时就完全原样了,但是对于新词,在非字母字符上或者在连续的空格上拆分,而不进行捕获,则不可能做到重建原始句子的形式;即使不改变任何单词,在空格上使用简单的str.split并假设它是单个空格,' '.join('a\tb\nc d\re'.split())也会恢复{};在没有捕获的情况下拆分的那一刻,数据就丢失了。相比之下,''.join(re.split(r'(\s+)', 'a\tb\nc d\re'))是无损的。在

如果您需要在不捕获的情况下对进行分组,请使用格式为(?:PAT)的非捕获组,而不是捕获,(PAT)。在

相关问题 更多 >

    热门问题