【发布时间】:2014-12-18 11:16:33
【问题描述】:
我正在编写一个测验程序。我正在使用 .txt 文件作为测试库,但无法弄清楚如何(使用正则表达式)匹配每个问题并在不同的行上打印出可能的答案。我原本只是要做真假,所以我不需要匹配其他任何东西,只要匹配“1”就可以了。基本上我只需要一行的问题和其他行的答案。这是一个问题的例子
1.) some text
a.) solution
b.) solution
c.) solution
我之前的代码:
while (<$test>) {
foreach my $line (split /\n/) {
my $match1 = "1";
if ($line =~ /$match1/) {
$question1 = $line;
print "$question1\n";
print "Answer: ";
$answer1 = <>;
chomp ($answer1);
if ( $answer1 =~ /(^a$)/i) {
$score1 = 20;
push @score, $score1;
}
}
【问题讨论】:
-
而 只会给你一行。
-
@sln,这取决于
$/是什么。如果它是未定义的,你会啜饮该文件。但是,您不会在 while 循环中 slurp 文件。但是你可以有特定的记录分隔符。 -
那么他就不需要while()了。除非他在拆分下方的收盘/开盘中重新使用 $test 。是的,没错,他可以使用一些不命名为换行符的晦涩分隔符。
-
@kspaeth - 有很多方法可以做到这一点。您可以使用 `/../ .. /../ 标志的东西,或者使用 \G 锚或仅使用全局标志(如果 /^\d/ 或不使用)。
-
你为什么不把你的问题/答案文件分成块(例如,用
\n\n分隔),这样你就可以一次打印整个块(包含一个问题和可能的答案),而不是而不是一次读取一行文件?更好的是,为什么不创建一个包含问题、可能解决方案和正确答案的哈希数组的漂亮数据结构呢?例如[ { question => 'Which way is up?', answers => { a => 'This way', b => 'That way', c => 'Dunno' }, correct => 'c' }, { ... }]
标签: regex perl string-matching