Skip to main content
 首页 » 编程设计

python之如何通过正则表达式模式拆分字符串并捕获模式内容

2025年05月04日16lovecherry

我想拆分包含数字的文本

text = "bla bla 1 bla bla bla 142 bla bla (234.22)" 

并且想在每个数字前后添加一个'\n'。

> "bla bla \n1\n bla bla bla \n142\n bla bla (234.22)" 

以下函数为我提供了子字符串,但它丢弃了模式,即数字。用包含 Python 模式的内容替换模式的最佳方法是什么?

re.split(' [0123456789]+ ', text) 

请您参考如下方法:

使用

s = re.sub(r' \d+ ', '\n\\g<0>\n', s) 

参见 regex demo .

只替换单独的数字作为整个单词使用

s = re.sub(r'\b\d+\b', '\n\\g<0>\n', s) 

如果你想匹配用空格括起来的数字只使用其中之一

re.sub(r'(?<!\S)\d+(?!\S)', '\n\\g<0>\n', s) # also at the start/end of string 
re.sub(r'(?<=\s)\d+(?=\s)', '\n\\g<0>\n', s) # only between whitespaces 

实际上,替换可以指定为'\n\g<0>\n' , 作为 \g是一个未定义的转义序列,反斜杠在这种情况下将被视为文字字符,并将保留在结果字符串中以形成正则表达式反向引用构造。

Python demo :

import re 
s = "bla bla 1 bla bla bla 142 bla bla" 
s = re.sub(r'\b\d+\b', '\n\\g<0>\n', s) 
print(s) # => bla bla \n1\n bla bla bla \n142\n bla bla