我想要一个正则表达式,其中包括' - '连字符和' _'下划线。但是这两个角色之间的字符串可能会得到 - 和_。这是一个例子
https://regex101.com/r/8vpzqe/1
sub-Exp1s07_task-route_learning_acq-test-01_run-14_bold.nii.gz
sub-Exp1s07_task-route_learning_acq-test-01_run-14_bold.nii.gz
sub-Exp1s07_task-map-learning_acq-test-01_run-14_bold.nii.gz
sub-Exp1s07_task-route_learning_acq-test-01_run-14_bold.nii.gz
sub-Exp1s07_task-map_learning_acq-test-01_run-14_bold.nii.gz
sub-Exp1s07_task-map_learning_fmap.nii.gz
sub-Exp1s07_task-map_learning_run-14_fmap.nii.gz
sub-Exp1s07_task-map_work_fmap.nii.gz
在上面的例子中,我打算提取输出为Exp1s07,routelearning,map_learning,map-learning,route_learning,route-learning,test-01,test01,test_01而不是一个完整的字符串作为包含上述模式的输出。
使用-\w+_
我无法捕捉 - 在路线学习之类的字符串之间。
解释较大的图片,上面的示例字符串基本上具有_key-value_
对模式。 sub-Exp1s07_task-map_learning_fmap.nii.gz
密钥 - sub, task, fmap, acq, run values- Exp2s07, map_learning, test-01
等
我想要找到的是任何值中没有像-
或_
这样的特殊字符。是任务-XX是强制性的,而acq-XXX,run-XXX是可选的。
路线学习在所有例子中并不常见。
答案 0 :(得分:0)
如果您使用/-([A-Za-z0-9]+([-_][a-zA-Z0-9]+)?)_/g
并删除第一个和最后一个字符,我想您会接近?
答案 1 :(得分:-1)
试试/-(\w+)/g
。
我认为这可以满足您的需求
更新:
/-(\w{3,})_/g
(这对您的编号约定做了一些假设,但这适用于上面列出的示例)