修改现有的正则表达式

时间:2014-05-20 18:19:12

标签: python regex

我有现有的正则表达式:

self.metadata = re.sub('(?<=<file_name>)\d{4,}','', self.metadata)

这将进行以下转换:

<file_name>1232434_FILE.mov --> <file_name>FILE.mov

但是,如果在其后面直接有.(句号),我不希望它删除文件名。

所以,结果应该是:

<file_name>1232434_FILE.mov --> <file_name>FILE.mov
<file_name>123445.mov --> <file_name>123445.mov

要使用的新正确正则表达式是什么?

2 个答案:

答案 0 :(得分:2)

你应该添加一个前瞻:

self.metadata = re.sub('(?<=<file_name>)\d{4,}(?![.\d])','', self.metadata)
<file_name>1232434_FILE.mov => <file_name>_FILE.mov
<file_name>1232434FILE.mov  => <file_name>FILE.mov
<file_name>123445.mov       => <file_name>123445.mov

Regular expression visualization

Debuggex Demo

答案 1 :(得分:0)

添加一个预测,断言您的文件名后跟一个非数字的非.字符。请注意,我们不能只查找非.字符,因为这可能是您的第5位数字(因为我们匹配4位数字)。

self.metadata = re.sub('(?<=<file_name>)\d{4,}(?=[^\d.])','', self.metadata)

RegEx

(?<=<file_name>)\d{4,}(?=[^\d.])

注意,这会将<file_name>1232434_FILE.mov替换为<file_name>_FILE.mov,但您当前的解决方案也会这样做..