【发布时间】:2023-03-07 18:08:01
【问题描述】:
我有一些文字
>>> 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)'
【问题讨论】:
-
其实
[@+-/*]必须写成[@+/*-],因为-正在创建一个范围。但是,\w+匹配wo__RF和[@+/*-]*将匹配**。从字符类中删除*?re.sub(r'^\w+[@+/-]*', '', text)?见this regex demo。 -
您对要保留的部分使用捕获组,而不是要删除的部分。
-
如果顶部评论中的解决方案对您不起作用,请说明您需要删除的具体内容以及原因。
-
@WiktorStribiżew 是的,当然 - 这不是我问题的答案,但以后可能会回来咬我。谢谢。
-
@WiktorStribiżew
re.sub()替换的东西与re.findall返回的东西不同,这似乎很奇怪。