您好,我正在编写一个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,有人可以帮助我。
答案 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)
正则表达式详细信息
QUESTION
-一个QUESTION
字\s+
-1个以上的空格字符(\w+)
-第1组:一个或多个单词字符\s*
-超过0个空格(.*?)
-第2组:任意0个以上的字符,数量尽可能少(?=QUESTION|$)
-直到QUESTION
或字符串结尾。