Perl实践以内容匹配整理

1、前言:

最近在学习Perl,发现Perl颇有趣,强大的正则匹配对文本处理颇有效。

想到最近有在刷网课,某学习网站上的选择题的顺序是随机的,发布答案的网站选项与个人测验的选项不匹配,看着眼睛累,还容易出错。秉承着“懒惰即美德的”的想法,因此想到用利用最近学习Perl来整理下个人答案选项。

如下为网站答案原有形式:数组

九、高校对师资博士后有哪些福利学习

A、等同于博士直接入职待遇网站

B、所在城市基金委会提供一部分福利3d

C、分房code

D、直接送钱blog

答案:ABit

而我想要的答案形式:class

九、高校对师资博士后有哪些福利
等同于博士直接入职待遇
所在城市基金委会提供一部分福利select

2、分析下原有答案形式咱们能够获得:

  1. 答案对应着选项,并且可能为一对一和一对多。
  2. 解析出答案选项,如答案:AB,咱们要获得A,B
  3. 保存题目标题。正确答案的选项内容,并去掉选项头,如A、

3、话很少说了开始,撸代码吧。

#!/usr/bin/env perl

use strict;
use warnings;
use autodie;

open my $answers,"<","answer.txt"; #读入的文件
open my $answers_fix,">","answer_fix.txt"; #修正的答案文件

my %answer_number = (
    "A" => 0,
    "B" => 1,
    "C" => 2,
    "D" => 3
); #每一个选项对应的数组下标

my @str_number;     #记住选择题的选项内容(通常为四个)
while(<$answers>){
    if(/^\d+、/){     #匹配题目标题,标题通常为(数字加、)如:一、
        print $answers_fix $_;
    }elsif(/^[A-D]、(.*)/s){	    #匹配某个具体的选项,其选项头通常为(字母加、)如:A、# 模式s,让通配符.号能够匹配换行符
        push @str_number, $1;
    }elsif(/^答案:([A-D]+)/){    #解析答案
          my @selects = split (//, $1);     #得到答案数组,如ABC,能够获得一个[A, B, C]的数组
          print $answers_fix map $str_number[$answer_number{$_}], @selects;     #把每一个正确选项,存入修正答案的文件
          print $answers_fix "\n";     #在题目的最后增长一个空行,使看起来更加顺眼
          @str_number = ();     #清空选项内容数组
    }
}

4、最后秀一下整理先后的答案截图吧!

结果

相关文章
相关标签/搜索