#python #regex
#python #регулярное выражение
Вопрос:
Здравствуйте, я пишу анализатор регулярных выражений Python и пытаюсь написать регулярное выражение, которое выделяет текст между словом QUESTION в большом объеме текста.
Пример текста
Exam A
QUESTION 1
Blank is designed to help users.
A. baba.
B. caca.
C. sasa.
D. tyty.
Correct Answer: D
Explanation
Explanation/Reference:
QUESTION 2
can I do something?
A. No
B. Yes
Correct Answer: C
Explanation
Explanation/Reference:
QUESTION 3
What does provide?
asdasdasd
import re
import os
import sys
questions_file_text = open("questionguide.txt", "r").read()
Questions = re.findall("(?:(?!QUESTION).|[nr])*QUESTION",questions_file_text)
Таким образом, я хочу выбрать все, включая номер вопроса, до следующего появления вопроса. Таким образом, я могу выполнить некоторый синтаксический анализ текста, чтобы отформатировать его в json.
Я могу использовать python, но, похоже, у меня не получается правильно использовать регулярное выражение, может кто-нибудь мне помочь.
Ответ №1:
Ну, я тупой, вот ответ:
import re
import os
import sys
questions_file_text = open("guide.txt", "r").read()
Questions = re.findall("(QUESTION([sS]*?)QUESTION)",questions_file_text)
print Questions
Ответ №2:
Если вы используете QUESTION([sS]*?)QUESTION
, вы пропустите все остальные, Question
потому что следующее Question
уже будет использовано с совпадением предыдущего регулярного выражения.
Вы можете использовать
re.findall(r"QUESTION.*?(?=QUESTION|$)",questions_file_text, re.S)
Смотрите демонстрацию регулярных выражений. Вы также можете захватывать различные части:
re.findall(r"QUESTIONs (w )s*(.*?)(?=QUESTION|$)",questions_file_text, re.S)
Смотрите другую демонстрацию регулярных выражений.
Подробности регулярных выражений
QUESTION
—QUESTION
словоs
— 1 пробел символов(w )
— Группа 1: один или несколько символов words*
— 0 пробелов(.*?)
— Группа 2: любые символы 0 , как можно меньше(?=QUESTION|$)
— доQUESTION
или конца строки.