java - 如何使用正则表达式拆分 MCQ(多项选择题)字符串

标签 java arrays regex string split

我正在尝试拆分从 pdf 文档中提取的字符串。 这是字符串...

“1. 《Swadesabhimani》第一任主编: (A) Vakkom Abdul Khadar Maulavi (C) K. Ramakrishna Pillai (乙)先生。 C.P. Govinda Pillai (D) G. Parameswaran Pillai 2. “Mitra mela”,一个 secret 社团,其组织者是: (A) B.G.蒂拉克 (C) 马丹·拉尔·丁格拉 (Madan Lal Dhingra) (B) 萨钦三亚 (D) 萨瓦卡 3. “Lekshamveedu”计划由以下机构发起: (A) A.K.戈帕兰 (C) 帕托姆。 A·塔努皮莱 (B) E.K.纳亚纳尔 (D) M.N.戈文丹·奈尔 4. 与水有关的法案(污染预防和控制):(A) 1974 (B) 1981 (C) 2002 (D) 1986 NFAI的扩展形式: (A) 印度国家电影奖 (B) 印度国家电影学院 (C) 印度国家电影资料馆 (D) 印度国家电影管理局 6. 以下哪项立法禁止萨蒂并将其定为非法? (A) 1870 年法案 (B) 1930 年沙拉达法案 (C) 1795 年孟加拉监管法案 (D) 1829 年 12 月第 XVII 监管法案 7 自由 印度报业解放者是: (A) 查尔斯·梅特卡夫 (C) 约翰·亚当斯 (B) 韦尔斯利勋爵 (D) 黑斯廷斯勋爵”

问题是

1) 缺少第五个问题的题号。

2) 第六题末尾有一个问号(?)而不是(:)

3) 第七个问题编号后面缺少点 (.)

我想要的输出是每个问题选项集的单独字符串 例如

“1. 《Swadesabhimani》第一任主编: (A) Vakkom Abdul Khadar Maulavi (C) K. Ramakrishna Pillai (乙)先生。 C.P. Govinda Pillai (D) G. Parameswaran Pillai"

“2. “Mitra mela”,一个 secret 社团,其组织者是: (A) B.G.蒂拉克 (C) 马丹·拉尔·丁格拉 (Madan Lal Dhingra) (B) Sachin 三亚 (D) Savarkar"

等等...

这是我尝试过的

1.

Pattern p=Pattern.compile("[0-9][.][a-zA-Z0-9]*");
String[] s=p.split(mcqString);

2.

Pattern p=Pattern.compile("[0-9][.]?[a-zA-Z0-9]*[:|?][a-zA-Z0-9]*");
String[] s=p.split(mcqString);

还有其他组合,但没有一个完全有效

最佳答案

您的问题均包含带有 ([A-Z]) 的部分

除了拆分之外,一种选择是匹配所有不以括号开头的部分。然后匹配所有不以括号开头的内容。

^(?:(?!\([A-Z]\)).*\R)+(?:\([A-Z]\).*\R*)+

说明

  • ^ 字符串开头
  • (?: 非捕获组
    • (?!\([A-Z]\)) 负向前看,右侧断言不是 () 之间的字符 A-Z
    • .*\R 匹配除换行符和 unicode 换行符序列之外的任何字符
  • )+ 关闭组并重复 1 次以上以获得至少 1 行
  • (?: 非捕获组
    • \([A-Z]\).*\R* 匹配 () 之间的字符 A-Z、任何字符的 1+ 倍以及可选的 unicode 换行序列
  • )+ 关闭组并重复 1 次以上以获得至少 1 行

在Java中

final String regex = "^(?:(?!\\([A-Z]\\)).*\\R)+(?:\\([A-Z]\\).*\\R*)+";

Regex demo | Java demo

关于java - 如何使用正则表达式拆分 MCQ(多项选择题)字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60466383/

相关文章:

java - Java中如何检查一个数组的值并将其与另一个数组进行比较?

python - 如何用命名组在 Python 中编写正则表达式来匹配这个?

python - 如何为字符串列表中的字符串添加引号?

java - 无法将 char[] 转换为 java 8 中的流

java - 添加新项目时如何启动计数器

javascript - 将跨度值推送到数组

java - 子数组计数 - 需要帮助

regex - 尝试使用 RegEx 负向查找不匹配日语单词

java - 使用 Gradle 将 WAR 文件发布到 Maven Repo

javascript - jQuery JSON 结果中的 ForEach 数组值