gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:03:50 26 4
gpt4 key购买 nike

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

“1.《Swadesabhimani》第一任主编:(A) Vakkom Abdul Khadar Maulavi (C) K. Ramakrishna Pillai(乙)先生。 C.P. Govinda Pillai (D) G. Parameswaran Pillai2.“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) 1986NFAI的扩展形式:(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com