Regex 跨新行获取两个角色之间的所有内容

Regex 跨新行获取两个角色之间的所有内容,regex,regex-lookarounds,regex-group,Regex,Regex Lookarounds,Regex Group,这是我正在处理的文本示例 6) 杰克的出租车服务是出租车行业的新进入者。它通过在行业中确立独特的地位而取得了成功。杰克的出租车服务是如何达到这个目标的 A) 提供长途出租车的价格高于 竞争对手;服务范围比竞争对手大 B) 以低于竞争对手的价格提供长途出租车票价; 服务面积比竞争对手小 C) 提供长途出租车的价格高于 竞争对手;服务于与竞争对手相同的区域 D) 以低于竞争对手的价格提供长途出租车票价; 服务于与竞争对手相同的区域 答:D 我正在尝试匹配整个问题,包括答案选项。从问题编号到单词答案

这是我正在处理的文本示例

6) 杰克的出租车服务是出租车行业的新进入者。它通过在行业中确立独特的地位而取得了成功。杰克的出租车服务是如何达到这个目标的

A) 提供长途出租车的价格高于 竞争对手;服务范围比竞争对手大

B) 以低于竞争对手的价格提供长途出租车票价; 服务面积比竞争对手小

C) 提供长途出租车的价格高于 竞争对手;服务于与竞争对手相同的区域

D) 以低于竞争对手的价格提供长途出租车票价; 服务于与竞争对手相同的区域

答:D

我正在尝试匹配整个问题,包括答案选项。从问题编号到单词答案

这是我当前的正则表达式

((rf'(?<={searchCounter}\) ).*?(?=Answer).*'), re.DOTALL)

((rf'(?正则表达式失败的原因是,当模式在单个多行字符串中搜索匹配项时,您使用myfile:
中的
逐行读取文件

contents=myfile.read()
替换myfile中的
行:
,然后使用
result=question\u模式。search(contents)
获取第一个匹配项,或者使用
result=question\u模式。findall(contents)
获取多个匹配项

关于正则表达式的注意事项:我没有修复整个模式,因为正如您所提到的,它超出了这个问题的范围,但是由于字符串输入现在是一个多行字符串,您需要删除
re.DOTALL
并使用
[\s\s]
匹配模式中的任何字符,
匹配除换行字符以外的任何字符。此外,环顾结构是冗余的,您可以安全地替换
(?=答案)
使用
应答
。此外,要检查是否存在匹配,您只需使用
if result:
,然后通过访问
result.group()
获取整个匹配值

完整代码段:

with open ('StratMasterKey.txt', 'rt') as myfile:
    contents = myfile.read()
    question_pattern = re.compile((rf'(?<={searchCounter}\) )[\s\S]*?Answer.*')) 
    result = question_pattern.search(contents)
    if result: 
        print( result.group() )
打开('StratMasterKey.txt','rt')作为myfile的
:
contents=myfile.read()

问题_pattern=re.compile((rf’(?您实际上获得了从问题编号到最后一个
D
)的所有文本,请参阅。您如何读取文件?
对于文件中的行
?您需要将文件读入变量,如
contents=file.read()
。当我在项目中运行字典时,实际上得到的是一本空字典。你介意详细说明一下吗?我添加了代码。当我尝试时(?这是一个逻辑问题:myfile:
中的行有
,逐行读取,但写入模式是为了在单个多行字符串中查找匹配项。删除myfile:
中的行的
,并将其替换为
contents=myfile.read()
,然后使用
result=question\u pattern.search(contents)
太好了!但是,我唯一的问题是,如果我不逐行搜索,如何迭代实例?
with open ('StratMasterKey.txt', 'rt') as myfile:
    contents = myfile.read()
    question_pattern = re.compile((rf'(?<={searchCounter}\) )[\s\S]*?Answer.*')) 
    result = question_pattern.search(contents)
    if result: 
        print( result.group() )