使用"re.search"时,如何搜索第二个实例而不是第一个实例?



re.search查找某物的第一个实例。在下面的代码中,"\t"出现了两次。有没有办法让它跳到第二个实例?

code = ['69.22t82.62t134.549n']
list = []
text = code
m = re.search('t(.+?)n', text)
if m:
    found = m.group(1)
    list.append(found)

结果:

list = ['82.62t134.549']

预期:

list = ['134.549']

表达式的此修改版本确实返回所需的输出:

import re
code = '69.22t82.62t134.549n'
print(re.findall(r'.*t(.+?)n', code))

输出

['134.549']

我猜也许你想设计一个表达式,有点类似于:

(?<=[t])(.+?)(?=[n])

演示

大于"第二个"选项卡只有一个解决方案。
你可以这样做:

^(?:[^t]*t){2}(.*?)n

解释

 ^                     # BOS
 (?:                   # Cluster
      [^t]*                # Many not tab characters
      t                    # A tab
 ){2}                  # End cluster, do 2 times
 ( .*? )               # (1), anything up to
 n                    # first newline

蟒蛇代码

>>> import re
>>> text = '69.22t82.62t134.549n'
>>> m = re.search('^(?:[^t]*t){2}(.*?)n', text)
>>> if m:
>>>     print( m.group(1) )
...
134.549
>>>

相关内容

最新更新