如何使用正则表达式删除字符串上嵌套文本周围的图案文本?

How to remove patterned texts surrounding a nested text on a string using regex?

我有一段文字txt = 'The fat \m{cat sat} on \m{the} mat.'希望输出'The fat cat sat on the mat.'

我试过以下两种方式:

re.sub(r'\m\{(.*)\}', '', txt) 
# output: 'The fat  mat.'

re.sub(r'\m\{(?=.*)\}', '', txt) 
# output: 'The fat \m{cat sat} on \m{the} mat.'

为什么会这样,我应该怎么做?

也许是这个表达式

\m{|}

替换为空字符串可能有效。

测试

import re

print(re.sub(r"\m{|}", '', 'The fat \m{cat sat} on \m{the} mat.'))

输出

The fat cat sat on the mat.

您可以稍微修改一下自己的正则表达式以使其工作

  • 使用反向引用代替空字符串而不是空字符串
  • 也让你的正则表达式变得懒惰,即 (.*) -> (.*?) or ([^}]*)

import re
txt = 'The fat \m{cat sat} on \m{the} mat.';
r = re.sub(r'\m\{(.*?)\}', "\g<1>", txt);
print(r);      

//The fat cat sat on the mat.

注意:- 您可以使用 r"""\1" 而不是 \g<1> 来反向引用捕获的组