如何使用正则表达式删除字符串上嵌套文本周围的图案文本?
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>
来反向引用捕获的组
我有一段文字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>
来反向引用捕获的组