python正则表达式仅替换括号中的内容

python正则表达式仅替换括号中的内容,python,regex,Python,Regex,我想替换ー到-的正则表达式,如\d+(ー)\d+(ー)\d+。我尝试了re.sub,但它将替换包括数字在内的所有文本。是否可以仅替换括号中的单词 e、 g。 sub('\d)+(ー)\d+(ー)\d+','4ー3.ー1','-')返回'4-3-1'。假设由于存在其他ー不满足正则表达式。我当前的解决方案是拆分文本并替换满足正则表达式的部分 re.sub('\d+(ー)\d+(ー)\d+','4ー3ー1','-') 正如您所指出的,正则表达式的输出将是“-”,因为您试图用“-”替换整个模式ー 你可

我想替换
-
的正则表达式,如
\d+(ー)\d+(ー)\d+
。我尝试了
re.sub
,但它将替换包括数字在内的所有文本。是否可以仅替换括号中的单词

e、 g。
sub('\d)+(ー)\d+(ー)\d+','4ー3.ー1','-')
返回
'4-3-1'
。假设由于存在其他
不满足正则表达式。我当前的解决方案是拆分文本并替换满足正则表达式的部分

re.sub('\d+(ー)\d+(ー)\d+','4ー3ー1','-')
正如您所指出的,正则表达式的输出将是“-”,因为您试图用“-”替换整个模式ー 你可以用

import re
input_string = '4ー3ー1'
re.sub('ー','-', input_string)
或者,您可以在数字上查找所有字符,并用“-”连接字符串

'-'.join(re.findall('\d+', input_string))

这两种方法都应该为您提供“4-3-1”

您可以在
re.sub
中为
repl
参数使用一个函数,以仅接触匹配组


进口稀土
s='1234ー2134ー5124'
关于子项(“\d+(ー)\d+(ー)\d+”,λx:x.组(0).替换('ー', '-'), (s)

使用稍微不同的模式,您可能能够利用不使用其匹配的字符串部分的先行表达式。也就是说,先行/后向将匹配模式,条件是它也匹配先行/后向表达式中的组件(而不是整个模式)


关于附属法例(”ー(?=\d+,“-”,s)

如果您可以使用emdash前面部分的固定长度表达式,那么可以将lookahead和lookahead结合起来,使正则表达式更加保守



关于sub((?您可以在此处使用组引用

import re
before = '4ー3ー1ーー4ー31'
after  = re.sub(r'(\d+)ー(\d+)ー(\d+)', r'\1-\2-\3', before)
print(after)  # '4-3-1ーー4ー31'

这里,
r'\1'
是对第一组的引用,也称为第一个括号。

OP已经提到,这不是一个好方法,因为当-s也不是模式的一部分时,它会替换-s。请阅读上面的内容并相应地修复您的答案。OP在整个字符串上使用replace。一个选项是在匹配组或仅替换特定字符