Python регулярное выражение текста в json-скрипт для захвата всего текста между вхождениями одного и того же слова?

#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: один или несколько символов word
  • s* — 0 пробелов
  • (.*?) — Группа 2: любые символы 0 , как можно меньше
  • (?=QUESTION|$) — до QUESTION или конца строки.