我有几种不同类型的字符串,想要找到一个特定的模式或者说字符串中的模式后面的第一个数字。以下是示例字符串。
str1 = mprage_scan_0006__002.nii
str2 = fgre3d_scan_0005__001+orig.HEAD
str3 = f3dgr2_scan_7_afni_009.nii
str4 = 2dfgre_scan_09_08.nii
我想在'扫描_?'之后提取数字?在每个字符串中。如果它是''''''或者' 09'或任何其他方式,我只想提取数字,即' 7',' 9'等。
我确实试过这个,但看起来我的解决方案并不灵活,因为它找到字符串中的第一个数字而不是'scan_'
模式后的第一个数字。
import re
a = re.findall(r'\d+', str[i])
scan_id = re.sub("^0+","",a[0])
答案 0 :(得分:2)
试试这个
a = re.findall(r'scan_0*(\d+)', str[i])
它的作用:
答案 1 :(得分:2)
使用积极的lookbehind断言尝试类似的东西:
>>> import re
>>>
>>> str1 = 'mprage_scan_0006__002.nii'
>>> str2 = 'fgre3d_scan_0005__001+orig.HEAD'
>>> str3 = 'f3dgr2_scan_7_afni_009.nii'
>>> str4 = '2dfgre_scan_09_08.nii'
>>>
>>> pattern = r'(?<=scan_)0*(:?\d+)'
>>>
>>> for s in [str1, str2, str3, str4]:
... m = re.search(pattern, s)
... print m.group(1)
...
6
5
7
9
>>>