使用re.sub将文本替换为匹配到的内容
2022-05-04 本文已影响0人
公输昊少
文本处理中,经常会碰到需要将某些指定字符替换掉,而保留其余部分的情况,比如:
{H}ate{BERT}: Retraining {BERT} for Abusive Language Detection in {E}nglish
上述文本中的{}
是LaTeX中的特殊字符,在整个句子中并没有什么实际含义,反而会影响我对文本的后续处理,所以我需要把上述文本中的花括号{}
去掉。然而,其余的文本中,{}
内包着的可能是公式或者其他的特殊字符,又或者有些{}
在文本中是有其特定含义的,我不希望把这些{}
也替换掉。因而不能简单地使用replace()
来替换。
用正则的话,可以这样来处理:
import re
s = "{H}ate{BERT}: Retraining {BERT} for Abusive Language Detection in {E}nglish"
pattern = re.compile(r'{([A-Za-z\-]+)}')
python(re.sub(pattern, r'\1', s))
输出结果为:
HateBERT: Retraining BERT for Abusive Language Detection in English
这里re.sub()
的第二个参数是替换的目标,用\1
来表示pattern
的正则表达式中第一个小括号括住的部分,记住第二个参数的字符串前面要加r
。
挺长时间之前这样用过,但是再次用到的时候忘了具体怎么用,百度也没找到想要的,最后还是在stackoverflow找打了答案,在这里记录一下。