我有现有的正则表达式:
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
要使用的新正确正则表达式是什么?
答案 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
答案 1 :(得分:0)
添加一个预测,断言您的文件名后跟一个非数字的非.
字符。请注意,我们不能只查找非.
字符,因为这可能是您的第5位数字(因为我们匹配4位数字)。
self.metadata = re.sub('(?<=<file_name>)\d{4,}(?=[^\d.])','', self.metadata)
(?<=<file_name>)\d{4,}(?=[^\d.])
注意,这会将<file_name>1232434_FILE.mov
替换为<file_name>_FILE.mov
,但您当前的解决方案也会这样做..