Как получить строку из двух строк - PullRequest
0 голосов
/ 18 апреля 2019

Я сейчас пытаюсь получить строку, которая находится между 2 подстроками.В этом случае строка, которой я должен манипулировать, является блоком кода.Не уверен, что это регулярное выражение или функция поиска, но я не получаю ничего обратно, и я не должен.Мне нужно получить смещение на линии 53, но мне нужно использовать 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 голосов
/ 18 апреля 2019

Поскольку ваш текст многострочный, вам понадобится флаг re.M.

Для использования. чтобы соответствовать символу новой строки, вам также нужен флаг re.DOTALL.

! GUSSET. * PR [GP1: 2,1: OFFSET] = сопоставит весь текст вплоть до OFFSET в строке 53, затем мы сопоставим все, что не является пробелом или; и сохраните его, чтобы он был возвращен 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...