String 在Perl的逗号分隔列表中,用字符串的一部分中的字母替换数字

String 在Perl的逗号分隔列表中,用字符串的一部分中的字母替换数字,string,perl,String,Perl,如果我有一个以逗号分隔的长度为10个数字字符串的文件(例如,000010101),并且想重新格式化字符串,用一个字母替换每个字符串的最后两个字符,其中01是a,以此类推,直到26是Z在Perl中执行此操作的节拍方法是什么 示例文件内容: 0109150103,1807111225,0305102306 然后,输出将是: 01091501C,18071112Y,03051023F 假设我将字符串拆分成一个数组,然后对每个数组求值,用substr查看最后2个数字,并替换为相应的字母。想知道用什么

如果我有一个以逗号分隔的长度为10个数字字符串的文件(例如,
000010101
),并且想重新格式化字符串,用一个字母替换每个字符串的最后两个字符,其中
01
a
,以此类推,直到
26
Z
在Perl中执行此操作的节拍方法是什么

示例文件内容:

0109150103,1807111225,0305102306
然后,输出将是:

01091501C,18071112Y,03051023F
假设我将字符串拆分成一个数组,然后对每个数组求值,用substr查看最后2个数字,并替换为相应的字母。想知道用什么最有效的方法来做这个虎钳,看看是否
01
,然后设置为
A
,依此类推

我会用蛮力的方式来做:

$data=<file.txt>;
@tokens=split /,/,$data;
while(@tokens)
{
 print substr($_,0,7)."A," if(substr($_,8,2)=='01');
 print substr($_,0,7)."B," if(substr($_,8,2)=='02');
#.
#.
 print substr($_,0,7)."Z," if(substr($_,8,2)=='26');
}
$data=;
@令牌=拆分/,/,$数据;
while(@tokens)
{
打印substr($,0,7)。“A”,如果(substr($,8,2)=='01');
打印substr($,0,7)。“B”,如果(substr($,8,2)=='02');
#.
#.
打印substr($,0,7)。“Z”,如果(substr($,8,2)='26');
}
可以使用

其中
/e
修饰符使regex中的替换部分作为代码进行计算。

另一个Perl

$ echo "0109150103,1807111225,0305102306" | perl -ne ' while(/(.+?)(..)(,|$)/g) { print "$1",chr(64+$2),"\n" } '
01091501C
18071112Y
03051023F
$
加入米勒溶液

echo "0109150103,1807111225,0305102306" | perl -pE 's/(\d\d)(?!\d)/chr(64+$1)/ge'

请添加一个示例,与您希望获得的结果相比,您尝试了什么,获得了什么结果。@zdim。。回答得好<代码>echo“010915010318071112250305102306”| perl-pE的/(\d\d)(?!\d)/chr(64+$1)/ge'@Miller Nice,而且非常高效:)我认为他们无论如何都需要数组。这是一种就地处理的好方法,无需拆分为列表(确实会发生一些数据复制)。也可以在我的帖子下看到@Miller的评论,类似的,但不会在循环中重新启动正则表达式引擎(这是正则表达式的开销)@zdim。。在qstn 54105509上需要您的帮助-我无法将反向参考和前瞻结合起来。。你能不能试一下,这是个好主意,也是个好答案。。。你还想做什么?如果没有反向引用(具有负前瞻性),是否以某种方式“匹配”?
echo "0109150103,1807111225,0305102306" | perl -pE 's/(\d\d)(?!\d)/chr(64+$1)/ge'