Regex 如何从两个字符串之间获取字符串

Regex 如何从两个字符串之间获取字符串,regex,python-3.x,string,text,Regex,Python 3.x,String,Text,我目前正在尝试获取介于两个子字符串之间的字符串。在本例中,我需要处理的字符串是一个代码块。不确定是正则表达式还是搜索函数,但我一直没有得到任何回复,我不应该这样做。我需要得到第53行的偏移量,但我需要使用角撑板来支撑左侧的Gus 1作为起始标记,ENDFOR可能是结束标记。只是不太确定这样的语法在python中如何工作。我已经尝试了一些我在网上看到的例子,但到目前为止运气不佳。任何帮助都将不胜感激。此外,我还希望使用compile实现,因为偏移量可以被多次访问 s = '''!GUSSET TO

我目前正在尝试获取介于两个子字符串之间的字符串。在本例中,我需要处理的字符串是一个代码块。不确定是正则表达式还是搜索函数,但我一直没有得到任何回复,我不应该这样做。我需要得到第53行的偏移量,但我需要使用角撑板来支撑左侧的Gus 1作为起始标记,ENDFOR可能是结束标记。只是不太确定这样的语法在python中如何工作。我已经尝试了一些我在网上看到的例子,但到目前为止运气不佳。任何帮助都将不胜感激。此外,我还希望使用compile实现,因为偏移量可以被多次访问

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)

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

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

!!角撑板。*PR[GP1:2,1:OFFSET]=将匹配第53行上偏移的所有文本,然后匹配任何不是空格或空格的文本;并保存由result.group(1)返回的结果,如下所示

(?!ENDFOR)。ENDFOR。将匹配任何非ENDFOR后跟ENDFOR的内容 这将防止它过于贪婪,并将匹配限制在此特定部分,而不是跨越多个ENDFOR

试一试

这会回来的

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

如果所讨论的字符串也在文本文件中,则此多行规则是否成立?文本文件就是文本。如果文本文件有换行符[],并且您希望跨多行进行搜索,那么您需要多行标志和dotall标志。在我看来,在文件中查找它时,它总是返回一个none值。但是,当使用您在字符串中提供的直接放入程序的代码时,它可以正常工作。我正确访问该文件也是因为没有读写问题。使用其他正则表达式,我可以访问某些内容。只是似乎无法找到字符串之间的字符串。NVD。当我试图循环浏览文件文本时,它不起作用。但它现在起作用了,出了什么问题?
PR[GP1:2,1:OFFSET]+21