Python正则表达式的困难

时间:2015-04-14 06:35:38

标签: python regex

这可能是一个简单的:) 我试着转换以下内容:

<gallery>File:ReDescribe.jpg|Photo by:J. K.File:redescribe_still1.pngFile:redescribe_still2.jpegFile:redescribe_still3.jpgFile:redescribe_still4.jpgFile:redescribe_still5.jpg</gallery>

成:

[[File:ReDescribe.jpg|photo by: J K]][[File:redescribe_still1.png]] [[File:redescribe_still2.jpeg]] [[File:redescribe_still3.jpg]] [[File:redescribe_still4.jpg]] [[File:redescribe_still5.jpg]]

首先,我正在寻找一个只能选择每个文件的Python正则表达式:filename.ext

到目前为止我虽然'File:(.*?)File'但是这个表达式排除了最后一个文件:因为它没有跟随任何字符。 请参阅regex_tester https://regex101.com/r/iV1mD9/1

表达式如何也匹配最后一个文件:后跟</gallery>

2 个答案:

答案 0 :(得分:1)

File:(.*?)(?=File:|<\/gallery>)

试试这个。请参阅演示。使用lookahead确保同时捕获最后File:

https://regex101.com/r/sJ9gM7/94#python

答案 1 :(得分:1)

首先删除gallery代码,然后应用以下正向前瞻性正则表达式。

>>> s = '''<gallery>File:ReDescribe.jpg|Photo by:J. K.File:redescribe_still1.pngFile:redescribe_still2.jpegFile:redescribe_still3.jpgFile:redescribe_still4.jpgFile:redescribe_still5.jpg</gallery>'''
>>> re.sub(r'(File:.+?)(?=File:|$)', r'[[\1]]', re.sub(r'</?gallery>', '', s))
'[[File:ReDescribe.jpg|Photo by:J. K.]][[File:redescribe_still1.png]][[File:redescribe_still2.jpeg]][[File:redescribe_still3.jpg]][[File:redescribe_still4.jpg]][[File:redescribe_still5.jpg]]'