我有几种不同类型的字符串,想找到一个特定的模式,或者说字符串中模式后面的第一个数字。

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

我想在“扫描”后提取数字每一根弦。如果是'007'或'09'或其他方式,我只想提取数字,即'7','9'等。。
我确实尝试过,但是看起来我的解决方案不像它在字符串中找到第一个数字而不是在'scan_'模式之后的第一个数字那么灵活。
import re
a = re.findall(r'\d+', str[i])
scan_id = re.sub("^0+","",a[0])

最佳答案

尝试使用积极的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
>>>

关于python - 查找字符串中的图案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36431480/

10-10 19:38