从字符串Perl Regex的后缀中删除Alpha字符

时间:2011-02-25 21:45:25

标签: regex perl

如何从一行中删除alpha后缀? 即。

AA12412BB 应该回来 AA12412

基本上向右看左边删除最后一个数字字符后面的任何字符

4 个答案:

答案 0 :(得分:5)

试试这个:$line =~ s/\D+\z//;

答案 1 :(得分:4)

如果字符串在$_

s/\D+?$//;

[编辑]:如果该行可能以+?结尾,则应使用非贪婪匹配(\n),以避免剥离此字符(感谢DanD)指出这一点)。这是有效的,因为$将匹配字符串结尾,或者紧跟字符串结尾处的\n之前。

在处理文本行时,首先通过调用\n来删除任何尾随chomp(),然后执行所需的任何工作,最后添加\n通常是个好主意。当线写出来的时候。这简化了处理后缀和计算行的长度,并且足够有用,perl提供了-l选项来自动化单行的过程。在这种情况下,可以使用更简单的s/\D+$//;

perl -lpe "s/\D+$//" < in.txt > out.txt

答案 2 :(得分:0)

试试这个:

$str =~ s/(?<=\d)\D+//;

如果行中有多个目标,您可能想要在其中抛出\b

$str =~ s/(?<=\d)\D+\b//;

如果您只想影响一行中的最后一场比赛,可以使用$代替:

$str =~ s/(?<=\d)\D+$//;

答案 3 :(得分:-1)

s/[A-Za-z]{2}$//;

或者如果你想要一个单行,请在DOS提示符下输入:

perl -pe "s/[A-Za-z]{2}$//" <a.txt >b.txt

这将删除a.txt中每行末尾的2个字母字符,并将新数据保存到b.txt

如果该行不以2个字母字符结尾,则不会修改该行。如果b.txt不存在则会创建它。如果b.txt确实存在,那么b.txt中的任何旧内容都将被销毁。 a.txt和b.txt需要位于您输入单行内容时所在的目录中如果您在C:\ users中输入单行代码而不是a.txt而b.txt也需要在C:\ users