如何从一行中删除alpha后缀? 即。
AA12412BB 应该回来 AA12412
基本上向右看左边删除最后一个数字字符后面的任何字符
答案 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