Python regex текст в JSON скрипт, чтобы захватить весь текст между вхождениями одного и того же слова? - PullRequest
2 голосов
/ 08 марта 2019

Здравствуйте, я пишу синтаксический анализатор регулярных выражений 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).|[\n\r])*QUESTION",questions_file_text)

Таким образом, я хочу выбрать все, включая номер вопроса, до следующего появления вопроса. Таким образом, я могу выполнить синтаксический анализ текста, чтобы отформатировать его в json.

Я могу сделать питона, который, похоже, просто не может понять, как работает мой RegEx, может кто-нибудь мне помочь.

MyQuestion Это клест, который я получил enter image description here

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Если вы используете QUESTION([\s\S]*?)QUESTION, вы пропустите все остальные Question, потому что следующее Question уже будет использовано с предыдущим совпадением с регулярным выражением.

Вы можете использовать

re.findall(r"QUESTION.*?(?=QUESTION|$)",questions_file_text, re.S)

См. Демоверсию regex . Вы также можете захватить различные части:

re.findall(r"QUESTION\s+(\w+)\s*(.*?)(?=QUESTION|$)",questions_file_text, re.S)

См. еще одну демонстрацию регулярных выражений .

Regex details

  • QUESTION - QUESTION слово
  • \s+ - 1+ пробельных символов
  • (\w+) - Группа 1: одно или несколько символов слова
  • \s* - 0+ пробелов
  • (.*?) - Группа 2: любые 0+ символов, как можно меньше
  • (?=QUESTION|$) - до QUESTION или до конца строки.
1 голос
/ 08 марта 2019

Welp Я тупой вот ответ:

import re
import os
import sys


questions_file_text = open("guide.txt", "r").read()


Questions = re.findall("(QUESTION([\s\S]*?)QUESTION)",questions_file_text)

print Questions
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...