C# 正则表达式 : How to break up plain text string

标签 c# regex string list file-io

我有一个问题,想知道如何解决。

我有一个从 pdf 文件中读入的字符串,其中包含问题列表。 其格式为:

QUESTION NO: 1

xxxxxxx (question text)

A) xxxx (multiple choice) B) xxxx C) xxxx ...

Answer: xxxxx

QUESTION NO: 2

xxxxxxx (question text)

.... (etc)

列表中约有 200 个问题。

我正在尝试使用正则表达式来分解文本,以便每个问题都可以位于单独的字符串中。

我以前曾使用 html 和 xml 文档完成过此操作,但它们很简单,因为有很多识别标记,如双引号、方括号和圆括号。

但我不知道如何仅使用文本来做到这一点。我尝试了很多组合,但似乎无法获得正确的格式:

var questionPattern = @"QUESTION NO:(.*)QUESTION NO:";
var questionMatch = Regex.Matches(pdfText, questionPattern, RegexOptions.Singleline);

我想知道有什么办法可以做到:

var questionPattern = @"(?<=QUESTION NO:)[^QUESTION NO:]*";

[^QUESTION NO:]* 在哪里读取每个问题标题后的所有内容,直到遇到下一个问题标题时停止?

显然这是错误的格式,但我希望人们能够理解我想要表达的意思。

任何帮助将不胜感激。
谢谢!

最佳答案

这可能是您能得到的最好结果 - 取决于答案。前瞻需要有条件,并且会破坏整个表达式。

(QUESTION NO: \d+[\S\s]*?Answer.*\n*)

工作示例:http://regex101.com/r/nC6yA1

关于C# 正则表达式 : How to break up plain text string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21200005/

相关文章:

ruby - Ruby 中未使用的正则表达式捕获

javascript - 正则表达式匹配十六进制颜色语法(和缩短形式)

python:获取一串长度为N的空格的最简单方法

c# - 强类型数据绑定(bind)和泛型?

c# - 当页码 = 1 时在 GridView 中隐藏 datapager

c# - 在运行时执行 C# 或 VB.NET 代码

c# - mysqldump.exe 需要密码,即使它在参数中给出

python - 从标准输出获取时间戳后的行

C 字符串文字 "too big for character"

python - 使用递归计算字符串中给定字符的出现次数