如何用python re.sub只替换部分匹配

发布于 2021-01-29 15:06:09

我需要通过一个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’或最后的’.a。

有没有办法只替换部分比赛?

关注者
0
被浏览
86
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。
     re.sub(r'(?:_a)?\.([^.]*)$', r'_suff.\1', "long.file.name.jpg")
    

    ?:启动一个不匹配的组(SO答案),所以(?:_a)匹配_a而不是枚举它,以下问号使其成为可选。

    因此,用英语说,匹配.<anything>模式后面(或不)模式的结尾_a

    做到这一点的另一种方法是使用 向后看 后面
    )。提及这一点是因为它们非常有用,但我在进行RE的15年中并不了解它们



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看