Swap DataSinks folder hierarchy

I wonder if it’s possible to ‘swap’ the folder hierarchy that DataSink creates? I would like to come from this folder hierarchy

output/derivatives/subjects/
└── 100610
    └── gambling
        └── first_level_design_spm_mat_file
            └── _subject_id_100610
                ├── _design_type_block
                │   └── SPM.mat
                └── _design_type_event
                    └── SPM.mat

…to this one (I ran both a block and event-designed first-level analysis and it would make more sense if all files would be nested within those two variants of my analysis):

output/derivatives/subjects/
└── 100610
    └── gambling
        ├── block
        │   └── first_level_design_spm_mat_file
        │       └── SPM.mat
        └── event
            └── first_level_design_spm_mat_file
                └── SPM.mat

I know that I can replace _design_type_block with block and_design_type_event with event using the substitutions argument. I also know that I could delete _subject_id_100610 by using regexp_substitutions.. But this would only lead me to:

output/derivatives/subjects/
└── 100610
    └── gambling
        └── first_level_design_spm_mat_file
            ├── block
            │   └── SPM.mat
            └── event
                └── SPM.mat

However, in my case I would like the whole hierarchy to be swapped and this leaves me kind of with a Catch-22. With regexp_substitutions, I can only replace a regex with a string but I kind of need to replace ‘a regex with a regex’ so to say).

So for example for the first file this would be the first filepath:

output/derivatives/subjects/100610/gambling/first_level_design_spm_mat_file/_subject_id_100610/_design_type_block/SPM.mat.

And the logic would need to be: “Find first_level_design_spm_mat_file and replace it with whatever string comes after _design_type (and vice versa)”