gpt4 book ai didi

regex - Perl - 返回字符串中最后一个数字后的最后一个字母字符并返回修改后的字符串

转载 作者:行者123 更新时间:2023-12-01 23:18:36 25 4
gpt4 key购买 nike

我有这样一个字符串:

$var = '123456d';

或者可能

$var = '123456'; # (no alpha char)

如果重要的话,最多有 6 位数字,不少于 5。数字中没有字母、空格或特殊符号。

在我的 Perl 脚本中,我需要删除并返回最后一个字母字符和没有字母字符的字符串。

我想可以使用\D 和 trim 吗?还是剁?但是,必须有一种简单的方法可以快速获取这两个变量。

my $numbers =~   s/\D+?$var//;  #???  

my $alpha = substr($var, 0, -1); ## but no alpha check.

my $alpha = chop($var); ## but no alpha check.

然后 if a-Z 等等来检查它是否是字母字符。

或者我的能力极限解决方案:

$alpha = $var;
$alpha =~ s/[0-9]//ig;
$var =~ s/[a-Z]//ig;
$numbers = $var;

结果:

($numbers == '123456')
($alpha eq 'd') (or '' if nothing)

我觉得在这里问这个问题太琐碎了,但是我找不到或写不出适用的解决方案。

我对 =~ s 的使用只是一个猜测,但是,一定有更好的方法,甚至只有一个衬里。

在此感谢所有帮助...

抱歉!数字后可能有 2 个字母字符!它们将需要作为单个 var ($alpha eq 'dd') 一起返回

我也发现了这个0:

$var =~ s{^([0-9]+).*}{$1}i;

最佳答案

使用 \pL 将避免捕获数字,并且将字符串设为可选将确保即使对于没有结尾字母的数字也会发生匹配。

my $var = '123456d';
my ($num, $letter) = $var =~ /^(\d+)(\pL)?$/;

请注意,您不能使用 \w 来捕获可能的结尾字母,因为它还包括数字。正如 tchrist 指出的那样,\p{alpha} 也可以使用。

关于regex - Perl - 返回字符串中最后一个数字后的最后一个字母字符并返回修改后的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10554277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com