У меня есть следующий вход:Regex для многострочной строки?
str = """
Q: What is a good way of achieving this?
A: I am not sure. Try the following:
1. Take this first step. Execute everything.
2. Then, do the second step
3. And finally, do the last one
Q: What is another way of achieving this?
A: I am not sure. Try the following alternatives:
1. Take this first step from before. Execute everything.
2. Then, don't do the second step
3. Do the last one and then execute the above step
"""
Я хочу, чтобы захватить пары КК в входе, но я не в состоянии получить хорошее регулярное выражение, чтобы сделать это. Мне удалось следующее:
(?ms)^[\s#\-\*]*(?:Q)\s*:\s*(\S.*?\?)[\s#\-\*]+(?:A)\s*:\s*(\S.*)$
Но, я в состоянии захватить вход следующим образом:
('Q', 'What is a good way of achieving this?')
('A', "I am not sure. Try the following:\n 1. Take this first step. Execute everything.\n 2. Then, do the second step\n 3. And finally, do the last one\n\n Q: What is another way of achieving this?\n A: I am not sure. Try the following alternatives:\n 1. Take this first step from before. Execute everything.\n 2. Then, don't do the second step\n 3. Do the last one and then execute the above step\n")
Обратите внимание, как вторая пара QA попал в плен первым. Если я использую жадный ?
в конце регулярного выражения ответа, он не фиксирует перечисления. Любые предложения о том, как это решить?
Есть ли причина, по которой вы не просто читаете ее по строкам? –
@WesAlvaro: Итак, вы предлагаете, чтобы я читал строки за строкой, а затем обрабатывал это с использованием подхода на основе состояний, а не регулярного выражения? – Legend
Является ли это глупым подходом к разбиению на 'Q:' сначала (вы получаете два элемента), а затем разбивается на 'A:' (вы получаете четыре: '[[Q, A], [Q, A]]')? –