【问题标题】:How to split a sting by regex pattern and also capture pattern content?如何通过正则表达式模式拆分字符串并捕获模式内容?
【发布时间】:2019-06-20 03:39:34
【问题描述】:

我想拆分包含数字的文本

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)

【问题讨论】:

  • 使用re.sub 而不是re.split

标签: python regex


【解决方案1】:

使用

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&lt;0&gt;\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

【讨论】:

  • 几乎,我需要在数字周围包含空格,它可以满足我的需要。谢谢! re.sub(r' \b\d+\b ', '\n\\g&lt;0&gt;\n', text)
  • @Sören 然后完全删除\b
  • 完美!还有7个去
【解决方案2】:

试试这个代码!!这可能会有所帮助!

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' 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多