Вы можете использовать re.sub
с рисунком [^_]*
, которые соответствуют любой подстроке из текста, который не содержит _
и, как re.sub
заменить образец для первого матча вы можете использовать его в этом случае:
>>> s="ID12345678_S3_MPRAGE_ADNI_32Ch_2_98_clone_transform_clone_reg_N3Corrected1_mask_cp_strip_durastripped_N3Corrected_clone_lToads_lesions_seg"
>>> import re
>>> re.sub(r'([^_]*).*',r'\1',s)
'ID12345678'
Но если это может быть появиться где-либо в вашей строке вы можете использовать re.search
следующим образом:
>>> re.search(r'ID\d+',s).group(0)
'ID12345678'
>>> s="_S3_MPRAGE_ADNI_ID12345678_32Ch_2_98_clone_transform_clone_reg_N3Corrected1_mask_cp_strip_durastripped_N3Corrected_clone_lToads_lesions_seg"
>>> re.search(r'ID\d+',s).group(0)
'ID12345678'
Но без регулярных выражений просто вы можете использовать split()
:
>>> s.split('_',1)[0]
'ID12345678'
're.sub (г '_ \ ш + _ \ d_ \ d + _ \ w + ',' ') 'ничего не сделает - вам нужны 3 аргумента, и если вы хотите' re.match', второй аргумент должен быть вашей длинной строкой ввода, а не пустая строка. Кроме того, если '' 'ваша длинная строка ввода, наивным решением будет просто' s [0:10] 'или' s [0: s.find ('_')] '. – jedwards
, если вы просто хотите, чтобы число и начало каждой строки просто использовали find, как показано на рисунке @jedwards. – letsc
Я думаю, что вы действительно хотите 're.match' (если строка гарантирована в начале ввода) или' re .search' в противном случае, а не 're.sub' - при условии, по крайней мере, вы не пытаетесь сделать замену в строке в гораздо более длинной строке. – jedwards