我正在尝试使用捕获组的结果对特定答案进行回溯。
文本示例:
10)一旦制定并实施了战略,无论发生什么事情,公司都必须坚持执行。
答案:FALSE
11)为了获得竞争优势,特斯拉需要实施或实现以下哪些策略?
A)模仿市场上最受欢迎的SUV的功能
B)将利润再投资以制造出更好的电动汽车
C)在其汽车的数字显示器上出售广告空间
D)替换价格较低的组件以保持较低的成本
答案:B
当前输出:
https://regex101.com/r/bLKmYX/1
当前正在输出FALSE和B作为这些问题的答案。
预期输出
我希望它输出FALSE,并且B)将利润再投资以制造出更好的电动汽车
当前正则表达式
'^\d+\)\s*([\s\S]*?)\nAnswer:\s*(.*)'
我如何使用第二个捕获组(B)的结果进行向后查找并获得整个答案?
您要求的结果是不可能的,因为只有在获得捕获的值之后才能检查捕获的值。
[您可以尝试其他逻辑:捕获答案字母,然后使用对组值的后向引用,将Answer:
子字符串后的相同字母匹配。
您可以考虑使用类似的模式
(?m)^\d+\)\s*((?:(?:(?!^\d+\))[\s\S])*?\n(([A-Z])\).*)$)?[\s\S]*?)\nAnswer:\s*(\3|FALSE)
请参见regex demo。
它现在有4个捕获组,第一个包含整个问题正文,然后第二个包含您需要的答案行,第三个是辅助(用于检查哪个答案正确),第四个是答案值。
详细信息
(?m)
-^
现在与行的开始位置匹配,$
与行的结束位置匹配^
-行首\d+
-1个以上的数字\)
-一个)
字符\s*
-0+空格((?:(?:(?!^\d+\))[\s\S])*?\n(([A-Z])\).*)$)?[\s\S]*?)
-组1:(?:(?:(?!^\d+\))[\s\S])*?\n(([A-Z])\).*)$)?
-可选的非捕获组匹配(?:(?!^\d+\))[\s\S])*?
-任何字符,出现0个或更多,但不以行开头,1 +个数字然后是)
序列]\n
-换行符(([A-Z])\).*)
-组2:捕获到组3中的ASCII大写字母,然后是)
char,然后是该行的其余部分(.*
)$
-行尾[\s\S]*?
-尽可能少0个字符]\nAnswer:
-新行,Answer:
字符串\s*
-0+空格(\3|FALSE)
-组4:组3值或FALSE
。]]