我需要使用正则表达式已知或未知模式查找和替换内容,然后我们需要存储查找内容,替换内容,替换内容计数:(我需要从100多个替换内容中获取该内容)
在这里我们需要获得
1)查找内容
2)已替换的内容和
3)计数值:
示例:<查找> <替换>->计数
此外,我们无法假设这一点,这可能是我们正在寻找和替换的,我们应该获得此报告。
我尽力了:
use strict;
use warnings;
my $str = 'Trp $\mathbf{R}^a$ locates \alpha \beta distantly $\mathrm{R}^a$ from $\mathit{R}^a$ cys25 in both \gamma and cathepsin K, with \alpha high and moderate $\mathbb{R}^1H$ strengths, respectively. The protein $\mathds{R}^a$ modification $\mathds{R}^1H$ largely \beta affects the binding sites and stability \gamma of the \gamma peptides, and the effects depend on \alpha the elemental compositions of the peptides';
#Sample :
$str=~s{<findcontent>}{<replacedcontent>}g;
#Tried something *different*
my $cnt=0; my (@pushStatsreport,$Statsreport) = "";
$str=~s/\\alpha/my $find=$&; my $rep = "\\boldsymbol\{\\alpha\}"; $cnt++; $Statsreport = "Find: $find\tRep: $rep\tCnt: $cnt\n"; ($rep); /ge;
push(@pushStatsreport, $Statsreport); $cnt=0;
$str=~s/\\math(it|rm|bf)\s*([a-z])\b/my $find = $&; my $rep = "\\checkmath$1\{$2\}"; $cnt++; $Statsreport = "Find: $find\tRep: $rep\tCnt: $cnt\n"; ($rep); /ge;
push(@pushStatsreport, $Statsreport);
print join "\n", @pushStatsreport;
我的结果和期望的输出:
查找:\ alpha Rep:\ boldsymbol {\ alpha} Cnt:3
找到:\ mathbf a代表:\ checkmathbf {a} Cnt:2
但是我不能接受这是更好的方法。有人可以帮助我。
答案 0 :(得分:1)
您可以尝试将搜索和替换字符串放入数组数组中,然后进行迭代以进行替换并收集计数和报告:
my @findreplace = (
[ q<\\\\alpha>, q<\boldsymbol{\alpha}>],
[ q<\\\\math(it|rm|bf)\s*([a-z])\b>, q<\checkmath$1{$2}>],
);
my (@pushStatsreport, $Statsreport);
for my $item (@findreplace) {
my ( $regex, $replace ) = @$item;
my $cnt = $str =~ s{$regex}{'"$replace"'}eeg;
$Statsreport = "Find: $regex\tRep: $replace\tCnt: $cnt";
push @pushStatsreport, $Statsreport;
}