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、最後秀一下整理先後的答案截圖吧!

結果

相關文章
相關標籤/搜索