我有一个关于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:
因为这就是文档的前两行it's documented to do中的内容(添加了重点):
特性本身的“原因”是,有时您希望知道捕获了什么,特别是当使用更复杂的模式时,它可以匹配所有类型的内容,并且您可能需要根据分割序列来调整代码。在
举个最简单的例子,如果你想在一个句子中改变某些单词(以一种非常复杂的方式,以至于};在没有捕获的情况下拆分的那一刻,数据就丢失了。相比之下,
re.sub
不是一个合理的选择),那么重新构造句子时就完全原样了,但是对于新词,在非字母字符上或者在连续的空格上拆分,而不进行捕获,则不可能做到重建原始句子的形式;即使不改变任何单词,在空格上使用简单的str.split
并假设它是单个空格,' '.join('a\tb\nc d\re'.split())
也会恢复{''.join(re.split(r'(\s+)', 'a\tb\nc d\re'))
是无损的。在如果您需要在不捕获的情况下对进行分组,请使用格式为
(?:PAT)
的非捕获组,而不是捕获,(PAT)
。在相关问题 更多 >
编程相关推荐