如何用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

回到顶部