如何用python re.sub只替换部分匹配
我需要通过一个reg表达式匹配两种情况并进行替换
‘long.file.name.jpg’->’long.file.name_ .jpg’
‘long.file.name_ .jpg’->’long.file.name_ .jpg’
我正在尝试执行以下操作
re.sub('(\_a)?\.[^\.]*$' , '_suff.',"long.file.name.jpg")
但这被削减了扩展名“ .jpg”,我得到了
long.file.name_suff。而不是long.file.name_suff.jpg我理解这是由于[^。] *
$部分,但是我不能排除它,因为我必须找到要替换的’_a’或最后的’.a。
有没有办法只替换部分比赛?
回答:
re.sub(r’(?:_a)?.([^.]*)$’, r’_suff.\1’, “long.file.name.jpg”)
?:
启动一个不匹配的组(SO答案),所以(?:_a)
匹配_a
而不是枚举它,以下问号使其成为可选。
因此,用英语说,匹配.<anything>
模式后面(或不)模式的结尾_a
做到这一点的另一种方法是使用 向后看 (见 后面
)。提及这一点是因为它们非常有用,但我在进行RE的15年中并不了解它们
以上是 如何用python re.sub只替换部分匹配 的全部内容, 来源链接: utcz.com/qa/411229.html