如何通过正则表达式模式分割字符串并捕获模式内容?

时间:2019-06-19 19:22:51

标签: python regex

我要分割包含数字的文本

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)

2 个答案:

答案 0 :(得分:3)

使用

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是未定义的转义序列,在这种情况下,反斜杠将被视为原义字符,并将保留在结果字符串中以形成regex反向引用构造。

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

答案 1 :(得分:3)

尝试此代码!!这可能有帮助!

import re
text = "bla bla 1 bla bla bla 142 bla bla"
replaced = re.sub('([0-9]+)', r'\n\1\n',text)
print(replaced)

Output:  'bla bla \n1\n bla bla bla \n142\n bla bla'