将re.sub与捕获组一起使用以仅替换匹配项的一部分

时间:2019-08-14 19:59:36

标签: python regex

我有一些文字

>>> import re
>>> text = 'wo__RF**81@t=(181,810)'

,我想用正则表达式显式地将'wo__RF'部分替换为''。此模式:

>>> pattern = '\A([\w]+)[@+-/*]*'

将匹配并拔出要删除的字符

>>> re.findall(pattern, text)
Out[6]: ['wo__RF']

但是在使用re.sub时包括尾随运算符

>>> re.sub(pattern, '', text)
Out[7]: '81@t=(181,810)'

我如何使输出看起来像这样?

Out[7]: '**81@t=(181,810)'

----编辑----

将模式修改为:

>>> pattern = '\A([\w]+)[@+-/*]*'

产生相同的输出

Out[7]: '81@t=(181,810)'

----编辑2 ----

删除捕获组

>>> pattern = '\A[\w]+[@+/*-]*'
>>> re.sub(pattern, '', text)
Out[11]: '81@t=(181,810)'

1 个答案:

答案 0 :(得分:0)

使用{{3}}匹配部分字符串而不替换它。

pattern = r'\A\w+(?=[@+\-/*])'

删除比赛时不需要捕获组;如果您需要将部分输入文本复制到结果中,则需要使用此选项。您也不需要[]周围的\w。并且您应该删除*之后的[@+\-/*],因为您需要其中一个字符。

在创建正则表达式时,通常应使用原始字符串,以免将regexp转义序列与Python转义序列混淆。并且您应该在字符集中转义-,否则它将用于创建一系列字符。