在字符串中查找模式

时间:2016-04-05 16:01:17

标签: python regex

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

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])

2 个答案:

答案 0 :(得分:2)

试试这个

a = re.findall(r'scan_0*(\d+)', str[i])

它的作用:

  • 寻找 scan _
  • 后跟零个或多个零
  • 后跟一个或多个数字,然后用括号
  • 选择最后一个组

答案 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
>>>