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。一个选项是在匹配组或仅替换特定字符