Python regex文本到json脚本以在同一单词出现之间获取所有文本?

时间:2019-03-07 21:29:38

标签: python regex

您好,我正在编写一个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的python,有人可以帮助我。

MyQuestion 这是我得到的最秘密 enter image description here

2 个答案:

答案 0 :(得分:1)

我很傻,这是答案:

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

答案 1 :(得分:1)

如果您使用QUESTION([\s\S]*?)QUESTION,则您将错过其他所有Question,因为下一个Question已被先前的正则表达式匹配所消耗。

您可以使用

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

请参见regex demo。您还可以捕获各个部分:

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

请参见another regex demo

正则表达式详细信息

  • QUESTION-一个QUESTION
  • \s+-1个以上的空格字符
  • (\w+)-第1组:一个或多个单词字符
  • \s*-超过0个空格
  • (.*?)-第2组:任意0个以上的字符,数量尽可能少
  • (?=QUESTION|$)-直到QUESTION或字符串结尾。