python - 如何用 python re.sub 仅替换部分匹配项

标签 python regex

我需要用一个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/

相关文章:

Python:两个函数之间的重叠(kde 和正常的 PDF)

javascript - 正则表达式与预期符号不匹配

python - 用于忽略字符串中括号的正则表达式

Javascript正则表达式捕获组中的单词和分隔符

javascript - 正则表达式匹配大写字母不在破折号之后

javascript - 忽略正则表达式中的字符

python - 索引字典列表时出现“仅在某些xcontent字节或压缩的xcontent字节上调用压缩机检测”错误

python - 如何按日期范围更新打印行

python - 处理未分配的变量

python - 稀疏 numpy 数组的局部敏感散列