使用re.sub将文本替换为匹配到的内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用re.sub将文本替换为匹配到的内容相关的知识,希望对你有一定的参考价值。

参考技术A 文本处理中,经常会碰到需要将某些指定字符替换掉,而保留其余部分的情况,比如:

上述文本中的 是LaTeX中的特殊字符,在整个句子中并没有什么实际含义,反而会影响我对文本的后续处理,所以我需要把上述文本中的花括号 去掉。然而,其余的文本中, 内包着的可能是公式或者其他的特殊字符,又或者有些 在文本中是有其特定含义的,我不希望把这些 也替换掉。因而不能简单地使用 replace() 来替换。
用正则的话,可以这样来处理:

输出结果为:

这里 re.sub() 的第二个参数是替换的目标,用 \1 来表示 pattern 的正则表达式中第一个小括号括住的部分,记住第二个参数的字符串前面要加 r 。
挺长时间之前这样用过,但是再次用到的时候忘了具体怎么用,百度也没找到想要的,最后还是在 stackoverflow 找打了答案,在这里记录一下。

re.sub

1.re.sub主要功能实现正则的替换。

re.sub定义:

sub(pattern, repl, string, count=0, flags=0) 

意思为:对字符串string按照正则表达式pattern,将string的匹配项替换成字符串repl。

公式解析:
pattern为表示正则中的模式字符串,
repl为replacement,被替换的内容,repl可以是字符串,也可以是函数。
string为正则表达式匹配的内容。
count:由于正则表达式匹配到的结果是多个,使用count来限定替换的个数(顺序为从左向右),默认值为0,替换所有的匹配到的结果。
flags是匹配模式,可以使用按位或’|’表示同时生效,也可以在正则表达式字符串中指定。

>import re
>re.sub(r\w+,10,"ji 43 af,geq",2,flags=re.I)
结果为:10 10 af,geq

详解:首先导入re模块,使用re.sub函数,r’\w+’为正则表达式,匹配英文单词或数字,’10’为被替换的内容,”ji 43 af,geq”为re匹配的字符串内容,count为2 只替换前两个,flags=re.I 忽略大小写。

以上是关于使用re.sub将文本替换为匹配到的内容的主要内容,如果未能解决你的问题,请参考以下文章

常用模块

re.sub

问题16:如何调整字符串中文本的格式

re.sub 不替换匹配 [重复]

用re替换文件中的单词

字符串正则匹配替换