Python正则表达式替换字符串

时间:2014-05-14 15:36:30

标签: python regex

我试图实现以下目标:

string = 'C:/some path to mp3/song (7) title and so on (1).mp3'

应该成为:

C:/some path to mp3/song (7) title and so on.mp3

为了匹配它我使用以下正则表达式:

pattern = '.*(\s\([0-9]+\))\.mp3'

匹配组包含:(u' (1)',)
但是,当我试图像这样替换比赛时:

processed = re.sub(pattern, '', string)

处理包含一个空字符串。 我怎样才能让re.sub()只替换上面找到的匹配?

1 个答案:

答案 0 :(得分:2)

您匹配整个字符串并替换它,使用前瞻,只在最后一次扩展之前匹配空格和(1)

扩展RegEx:

\s*     (?# 0+ characters of leading whitespace)
\(      (?# match ( literally)
[0-9]+  (?# match 1+ digits)
\)      (?# match ) literally)
(?=     (?# start lookahead)
  \.    (?# match . literally)
  mp3   (?# match the mp3 extension)
  $     (?# match the end of the string)
)       (?# end lookeahd)

演示: Regex101

<强>实施

pattern = '\s*\([0-9]+\)(?=\.mp3$)'
processed = re.sub(pattern, '', string)

备注:

  • mp3可以替换为[^.]+以匹配任何扩展名,(mp3|mp4)可以匹配多个扩展名。
  • 使用\s+代替\s*(1)之前要求至少一些空格,感谢@SethMMorton