我需要用一个reg表达式匹配两种情况并进行替换
'long.file.name.jpg' -> 'long.file.name_suff.jpg'
'long.file.name_a.jpg' -> 'long.file.name_suff.jpg'
我正在尝试执行以下操作
re.sub('(\_a)?\.[^\.]*$' , '_suff.',"long.file.name.jpg")
但这是删除扩展名“.jpg”,我得到了
long.file.name_suff。而不是 long.file.name_suff.jpg 我知道这是因为 [^.]*$ 部分,但我不能排除它,因为 我必须找到最后一次出现的“_a”来替换或最后一次出现“。”
有没有办法只替换部分匹配项?
最佳答案
在要保留的部分周围放置一个捕获组,然后在替换文本中包含对该捕获组的引用。
re.sub(r'(\_a)?\.([^\.]*)$' , r'_suff.\2',"long.file.name.jpg")
关于python - 如何用 python re.sub 仅替换部分匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2763750/