我在pythex上使用了以下正则表达式来测试它:
(\d|t)(_\d+){1}\.
Run Code Online (Sandbox Code Playgroud)
它工作正常,我主要对组2感兴趣.它成功运作如下所示:
但是,我无法让Python真正向我展示正确的结果.这是一个MWE:
fn_list = ['IMG_0064.png',
'IMG_0064.JPG',
'IMG_0064_1.JPG',
'IMG_0064_2.JPG',
'IMG_0064_2.PNG',
'IMG_0064_2.BMP',
'IMG_0064_3.JPEG',
'IMG_0065.JPG',
'IMG_0065.JPEG',
'IMG-20150623-00176-preview-left.jpg',
'IMG-20150623-00176-preview-left_2.jpg',
'thumb_2595.bmp',
'thumb_2595_1.bmp',
'thumb_2595_15.bmp']
pattern = re.compile(r'(\d|t)(_\d+){1}\.', re.IGNORECASE)
for line in fn_list:
search_obj = re.match(pattern, line)
if search_obj:
matching_group = search_obj.groups()
print matching_group
Run Code Online (Sandbox Code Playgroud)
输出什么都没有.
但是,上面的pythex清楚地显示了两个返回的组,第二个应该存在并且击中了更多的文件.我究竟做错了什么?
你需要使用re.search(),而不是re.match().re.search()匹配字符串中的任何位置,而re.match()匹配仅在开头.
import re
fn_list = ['IMG_0064.png',
'IMG_0064.JPG',
'IMG_0064_1.JPG',
'IMG_0064_2.JPG',
'IMG_0064_2.PNG',
'IMG_0064_2.BMP',
'IMG_0064_3.JPEG',
'IMG_0065.JPG',
'IMG_0065.JPEG',
'IMG-20150623-00176-preview-left.jpg',
'IMG-20150623-00176-preview-left_2.jpg',
'thumb_2595.bmp',
'thumb_2595_1.bmp',
'thumb_2595_15.bmp']
pattern = re.compile(r'(\d|t)(_\d+){1}\.', re.IGNORECASE)
for line in fn_list:
search_obj = re.search(pattern, line) # CHANGED HERE
if search_obj:
matching_group = search_obj.groups()
print matching_group
Run Code Online (Sandbox Code Playgroud)
结果:
('4', '_1')
('4', '_2')
('4', '_2')
('4', '_2')
('4', '_3')
('t', '_2')
('5', '_1')
('5', '_15')
Run Code Online (Sandbox Code Playgroud)
由于您正在编译正则表达式,因此可以search_obj = pattern.search(line)代替search_obj = re.search(pattern, line).至于你的正则表达式本身,r'([\dt])(_\d+)\.'相当于你正在使用的那个,并且更清洁一点.
| 归档时间: |
|
| 查看次数: |
1908 次 |
| 最近记录: |