首页 > 解决方案 > 如何使用正则表达式在除看起来像 \something 的任何字符之外的字符之间的整个字符串中插入空格

问题描述

我有一个字符串s = '{qcos\\theta_{g}\\over r})^{2\\over 1 + \\alpha^{2}}}\\ 1234'

如果我使用(?<=.)(?!$) 本示例中使用的正则表达式,它会将整个字符串拆分为白色字符。但我想保留任何东西\wordonly,例如在上面给定的字符串中,我希望答案是

'{ q c o s \\theta _ { g } \\over r } ) ^ { 2 \\over 1 + \\alpha ^ { 2 } } } \\ 1 2 3 4'

where\theta保持不变,但123变成1 2 3abc变成a b c\theta_{21}变成\theta _ { 2 1 }

标签: pythonregex

解决方案


您可以使用

import re
s = '{qcos\\theta_{g}\\over r})^{2\\over 1 + \\alpha^{2}}}\\ 1234'
print( ' '.join(re.findall(r'\\[a-zA-Z]*|\S', s)) )
# => { q c o s \theta _ { g } \over r } ) ^ { 2 \over 1 + \alpha ^ { 2 } } } \ 1 2 3 4

请参阅Python 演示

使用re.findall(r'\\[a-zA-Z]*|\S', s),您将获得\+ 字母和任何单个非空白字符的列表。

然后,您只需将找到的项目与空格连接起来,' '.join(...).

正则表达式详细信息

  • \\- 一个\字符
  • [a-zA-Z]*- 零个或多个 ASCII 字母
  • |- 或者
  • \S- 任何非空白字符。

请参阅正则表达式演示


推荐阅读