我的Perl脚本接收数据并将其存储为数组。然后,脚本将这些数据转换为代码,然后将其复制到LaTeX中。
我的部分数据包括4.25、6.5、6.75之类的数字,我希望进行查找和替换,以便在粘贴到LaTeX中时将4.25写为4 1/4。要求用户提供存储为$variable
的号码。查找和替换操作如下:
$variable =~ s/\b.25\b/\\sfrac{1}{4}/;
$variable =~ s/\b.5\b/\\sfrac{1}{2}/;
$variable =~ s/\b.75\b/\\sfrac{3}{4}/;
我想要做的是将4.25
替换为代码4\sfrac{1}{4}
,将6.5
替换为代码6\sfrac{1}{2}
,将6.75
替换为代码{ {1}}。
但是,运行此命令时,它将正确替换.25和.5,但是将.75替换为6\sfrac{3}{4}
。我对它在做什么感到困惑。
我确实将代码更改为:
.\sfrac{1}{2}
这可以缓解上述问题,但是当我输入数字5.5时,它将替换为$variable =~ s/\b.25\b/\\sfrac{1}{4}/;
$variable =~ s/\b.75\b/\\sfrac{3}{4}/;
$variable =~ s/\b.5\b/\\sfrac{1}{2}/;
而不是\sfrac{1}{2}.5
。
此外,如果我需要将5\sfrac{1}{2}
转换为字符串,该怎么做?
答案 0 :(得分:3)
未转义的点匹配任何字符(换行符除外)。要匹配正则表达式中的文字点,您需要\.
或[.]
。
例如,\b.5\b
与75
中的0.75
相匹配,因为点可以与7
相匹配。
答案 1 :(得分:1)
顺便说一句,您不应像这样多次扫描输入。这是一个更好的解决方案:
my %map = (
".25" => "\\sfrac{1}{4}",
".5" => "\\sfrac{1}{2}",
".75" => "\\sfrac{3}{4}",
);
my $alt = join "|", map quotemeta, keys %map;
my $re = qr/\b($alt)\b/;
$var =~ s/$re/$map{$1}/g;