【问题标题】:find and replace numbers to LaTeX fractions correctly正确查找数字并将其替换为 LaTeX 分数
【发布时间】:2019-05-27 20:08:29
【问题描述】:

我的 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 替换为代码6\sfrac{3}{4}

但是,当运行它时,它会正确替换 .25 和 .5,但 .75 会替换为 .\sfrac{1}{2}。我对它在做什么感到困惑。

我确实将代码更改为:

$variable =~ s/\b.25\b/\\sfrac{1}{4}/;
$variable =~ s/\b.75\b/\\sfrac{3}{4}/;                  
$variable =~ s/\b.5\b/\\sfrac{1}{2}/;

这缓解了上述问题,但是当我输入数字 5.5 时,它会将 this 替换为 \sfrac{1}{2}.5 而不是 5\sfrac{1}{2}

另外,如果我需要将@variable 转换为字符串,我该怎么做?

【问题讨论】:

  • 你的最后一句话似乎与这个问题的其余部分无关;也许把它拿出来,用代码问一个单独的问题?
  • 顺便说一句,Regexp::Debugger 是一个非常方便的工具,可以查看正则表达式如何在您的字符串中进行。这样你就可以很容易地找到你的正则表达式偏离轨道的地方。

标签: regex perl replace substitution


【解决方案1】:

未转义的点匹配任何字符(换行符除外)。要匹配正则表达式中的文字点,您需要 \.[.]

例如,\b.5\b 匹配0.75 中的75,因为点可以匹配7

【讨论】:

    【解决方案2】:

    顺便说一句,您不应该像那样多次扫描输入。这是一个更好的解决方案:

    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;
    

    【讨论】:

      猜你喜欢
      • 2021-08-14
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      • 1970-01-01
      相关资源
      最近更新 更多