这是我正在处理的文本的样本。
6)杰克的出租车服务是出租车行业的一个新进入者。它通过在行业中占据独特的地位而取得了成功。杰克的出租车服务是如何实现这一目标的?
( A)提供比竞争对手更高的长途计程车费;为比竞争对手更大的区域提供服务。
( B)以低于竞争对手的价格提供长途计程车费;服务范围比竞争对手小
( C)提供比竞争对手更高的长途计程车费;服务范围与竞争对手相同。
D)以低于竞争对手的价格提供长途计程车费;服务范围与竞争对手相同。
答:d
,我试图匹配整个问题,包括答案选项。从问号到单词答案的所有内容
这是我当前的regex表达式
((rf'(?<={searchCounter}\) ).*?(?=Answer).*'), re.DOTALL)SearchCounter只是一个与当前问题相对应的变量,在本例中是6,我认为这个问题与跨新行搜索有关。
编辑:完整源代码
searchCounter = 1
bookDict = {}
with open ('StratMasterKey.txt', 'rt') as myfile:
for line in myfile:
question_pattern = re.compile((rf'(?<={searchCounter}\) ).*?(?=Answer).*'), re.DOTALL)
result = question_pattern.search(line)
if result != None:
bookDict[searchCounter] = result[0]
searchCounter +=1发布于 2020-04-24 08:25:07
regex失败的原因是您用for line in myfile:逐行读取文件,而模式在单个多行字符串中搜索匹配项。
将for line in myfile:替换为contents = myfile.read(),然后使用result = question_pattern.search(contents)获得第一个匹配,或使用result = question_pattern.findall(contents)获取多个匹配。
regex上的注意事项:我没有修复整个模式,因为正如您所提到的,它超出了这个问题的范围,但是由于字符串输入现在是一个多行字符串,您需要删除re.DOTALL并使用[\s\S]来匹配模式中的任何字符,使用.来匹配任何字符(除了断行字符)。另外,查找结构是多余的,您可以安全地用(?=Answer)替换Answer。另外,要检查是否有匹配,只需使用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() )https://stackoverflow.com/questions/61389990
复制相似问题