如何从2个字符串之间获取字符串

时间:2019-04-18 01:19:55

标签: regex python-3.x string text

我当前正在尝试获取介于2个子字符串之间的字符串。在这种情况下,我需要处理的字符串是一个代码块。不知道这是正则表达式还是搜索功能,但我一直没有回来,我不应该。我需要在第53行获得Offset,但是我需要使用Gusset To Backplate Left Gus 1作为开始标记,而ENDFOR我认为可能是结束标记。只是不太确定如何在python中使用类似语法的语法。我尝试了一些我在网上看到的示例,但到目前为止还没有运气。任何帮助,将不胜感激。我也想通过编译来做到这一点,因为偏移量可以被多次访问。

s = '''!GUSSET TO BACKPLATE LEFT GUS 1 ;
45:  E_NO(8) ;
46:  FOR R[191:COUNTER B]=1 TO R[199:CHANNELS] ;
47:   ;
48:  CALL CHAN_BP_TO_GR    ;
49:   ;
50:  PR[GP1:2,1:OFFSET]=PR[GP1:2,1:OFFSET]-R[197:X OFFSET MM]    ;
51:  --eg:THESE OFFSETS ONLY APPLY TO THIS BLOCK AND INCREASE THE AMOUNT GIVEN
  :  EACH LOOP ;
52:  !X OFFSET ;
53:  PR[GP1:2,1:OFFSET]=PR[GP1:2,1:OFFSET]+21    ;
54:  !Y OFFSET ;
55:  PR[GP1:2,2:OFFSET]=PR[GP1:2,2:OFFSET]+0    ;
56:  !Z OFFSET ;
57:  PR[GP1:2,3:OFFSET]=PR[GP1:2,3:OFFSET]+0    ;
58:  ENDFOR ;'''


string1 = re.compile('!GUSSET TO BACKPLATE LEFT GUS 1 ;')
string2 = re.compile('PR[GP1:2,1:OFFSET]=PR[GP1:2,1:OFFSET]+[0-9]*    ;')
string3 = re.compile('ENDFOR ;')

result = re.search(r'!GUSSET TO BACKPLATE LEFT GUS 1 ;, (PR[GP1:2,1:OFFSET]=PR[GP1:2,1:OFFSET]+[0-9]*    ;),ENDFOR ;', s)
'.(PR[GP1:2,1:OFFSET]=PR[GP1:2,1:OFFSET]+[0-9]*    ;'
print(result)

1 个答案:

答案 0 :(得分:0)

由于文本为多行,因此需要re.M标志。

使用。要匹配换行符,您还需要re.DOTALL标志。

!GUSSET。* PR [GP1:2,1:OFFSET] =将匹配所有文本,直到第53行的OFFSET,然后匹配所有非空格或;并保存要由result.group(1)返回的内容,如下所示。

(?! ENDFOR)。 ENDFOR。将匹配所有非ENDFOR的内容,然后是ENDFOR 这样可以防止它过于贪婪,并将匹配范围限制在此特定部分,并且不要跨越多个ENDFOR。

尝试

result = re.search('!GUSSET.*PR\[GP1:2,1:OFFSET\]=([^; ]+)(?!ENDFOR).*ENDFOR.*', s,re.M|re.DOTALL)
print(result.group(1))

这将返回

PR[GP1:2,1:OFFSET]+21