RegEx / Python.findall() - 仅当它出现在其他东西之前才匹配

时间:2014-08-05 08:25:03

标签: python regex findall

我保证我会检查其他问题,但我似乎无法找到适用于我的特定问题的内容。我试图匹配一个模式只有当它出现在某个其他子字符串之前,但是我试图匹配的模式和子字符串很多次出现在文件中。我试图用Python的re.findall()函数

来做这件事

我有这个python代码和一个很长的文件来解析。我添加了一条评论来解释我尝试做什么以及在哪里,并希望我没有太模糊。

感谢任何形式的帮助。

names = re.findall('CSRN' + r':+([A-Z ]*)' + r'\+:*'
                 + 'CGVN' + r':+([A-Z ]*)'
                 # + what's underneath only if it appears before an occurence of 'IRV',
                 # otherwise skip and try to find next pattern
                 + 'STGN' + ':([0-9a-zA-Z]*)'
                 + r'(?:OLD\+' + 'STGN' + ':([0-9a-zA-Z]*))?', text, re.DOTALL)

1 个答案:

答案 0 :(得分:0)

这个正则表达式在每次出现IRV之前都会得到“最后一个”STGN号码,我认为这就是你所要求的。

STGN:([0-9A-F]+)(?=(?:[^S]|S(?!TGN))*IRV)

Regular expression visualization

Debuggex Demo

我不明白这与你想找的名字有什么关系,但也许这会对你有所帮助。

简要说明:

  • [0-9A-F]找到十六进制数字,我认为您正在使用此处
  • 基本上这个正则表达式是“给我STGN编号后跟任何不是STGN然后是IRV”