在"任务后找到字符串 - "在使用正则表达式的长子串中

时间:2017-02-27 22:35:11

标签: python regex python-3.x

我有一个模式sub-*_task-XYZabc_run-*_bold.jsonsub-*_task-PQRghu_bold.json的文件列表,例如:

sub-03_task-dis_run-01_bold.json
sub-03_task-dis_run-02_bold.json
sub-03_task-dis_run-03_bold.json
sub-03_task-dis_run-04_bold.json
sub-03_task-dis_run-05_bold.json
sub-03_task-dis_run-06_bold.json
sub-03_task-fb_run-01_bold.json
sub-03_task-fb_run-02_bold.json
sub-03_task-fb_run-03_bold.json
sub-03_task-fb_run-04_bold.json

我打算从文件名中找到所有不同的任务名称。在上面的示例中,disfb是两项任务。

我应该使用哪种正则表达式在给定文件名中从TASKNAME查找task-TASKNAME

1 个答案:

答案 0 :(得分:2)

以下 regex 应该这样做:

(?<=task-).*?(?=_)

请参阅regex demo / explanation

python demo

import re
regex = r"(?<=task-).*?(?=_)"
str = """sub-03_task-dis_run-01_bold.json
         sub-03_task-dis_run-02_bold.json
         sub-03_task-dis_run-03_bold.json
         sub-03_task-dis_run-04_bold.json
         sub-03_task-dis_run-05_bold.json
         sub-03_task-dis_run-06_bold.json
         sub-03_task-fb_run-01_bold.json
         sub-03_task-fb_run-02_bold.json
         sub-03_task-fb_run-03_bold.json
         sub-03_task-fb_run-04_bold.json"""
matches = re.finditer(regex, str)
for matchNum, match in enumerate(matches):
    matchNum = matchNum + 1
    print ("{match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))