Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在python正则表达式中,re.split(';(\d)';';split单词';)的输出与re.split(';\d';';split单词';)的输出不同?_Python_Regex_Split - Fatal编程技术网

为什么在python正则表达式中,re.split(';(\d)';';split单词';)的输出与re.split(';\d';';split单词';)的输出不同?

为什么在python正则表达式中,re.split(';(\d)';';split单词';)的输出与re.split(';\d';';split单词';)的输出不同?,python,regex,split,Python,Regex,Split,我有一个关于Python中正则表达式的问题。我已尝试打印出re.split(“(\d)”,“SPL5IT the WORDS”)和re.split(“\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'

我有一个关于Python中正则表达式的问题。我已尝试打印出re.split(“(\d)”,“SPL5IT the WORDS”)和re.split(“\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']
为什么第二个会返回分隔符,而第一个不会返回分隔符?

因为这是文档前两行中的内容(重点添加):

按出现的
模式拆分
字符串
。如果捕获括号用于
模式
,则模式中所有组的文本也将作为结果列表的一部分返回

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

举个最简单的例子,如果你想对句子中的某些单词进行变异(以一种足够复杂的方式,使得
re.sub
不是一个合理的选择),然后完全按照原样重建句子,但要使用新词,根据非字母字符或空白进行拆分,如果不捕捉,就不可能重建原始句子的形式;即使不改变任何单词,在运行空格时使用简单的
str.split
,并假设它是单个空格,
'.join('a\tb\nc d\re'.split())
也会返回
'a b c d e'
;当您分割而不捕获时,您就丢失了数据。相比之下,
'.join(re.split(r'(\s+),'a\tb\nc d\re'))
是无损的


如果您需要分组而不捕获,请使用非捕获组,其形式为
(?:PAT)
,而不是捕获,
(PAT)

我删除了重复状态,因为虽然我想知道如何做某事,但这个人已经知道,并询问它为什么会这样做。我不知道为什么这是一个特别有用的问题,但它不是重复的。@ShadowRanger至少,回答这个问题表明你觉得它很有用。@TylerH:呃。或者这只是意味着我很无聊,不介意玩链接猴子来链接文档。@TylerH:我认为回答为什么这个功能存在(不仅仅是为什么它会这样),至少是一件有用的事情,所以我更新了。