正则表达式添加千位分隔符

发布于 2021-11-28 06:34:38 字数 493 浏览 915 评论 7

正常的整数分隔:

my $number = <STDIN>;
if( $number =~ s/(d{1,3})(?=(?:d{3})+(?!d)/$1,/g){
    print $number;
}

但是现在我们要给比如12312312.13123这样带小数的分隔,上面就不能用,

有网友提供

s/(d{1,3})(?=(?:d{3})+(?!d|$)/$1,/g

的确可以匹配,但我不太懂什么意思,$是末尾的意思,这里是怎么组合的?

还有这个匹配反过来也不能匹配没有小数的,有大虾可以写出既同时匹配小叔和整数的办法不

 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

伴我心暖 2021-11-28 12:15:18

手打的,失策失策,改回来拉=。=sorry

柳絮泡泡 2021-11-28 12:15:17

话说这个算比较经典的正则表达式,对着说明就能看懂的拉

刘备忘录 2021-11-28 12:11:30

太高深了!您问题提的都有错误!s/(d{1,3})(?=
{?:d{3})+(?!d
|$)/$1,/g

柠檬 2021-11-28 12:10:26

12,312,312.13123

千笙结 2021-11-28 11:19:06

比如12312312.13123这样带小数的分隔 :这个分割成什么样?

醉酒的小男人 2021-11-28 11:04:06

看不懂

居里长安 2021-11-28 10:49:05
my $number = <STDIN>;
my $intNumber = int($number);
if ($number !=$intNumber){
    $number =~ s/(d{1,3})(?=(?:d{3})+(?!(d|$)))/$1,/g;
    print $number;
}else{
    $number =~ s/(d{1,3})(?=(?:d{3})+(?!(d)))/$1,/g;
    print $number;
}

(?!(d|$))可以解释为不是非数字或不是末尾,还是加上括号不容易歧义。

暂时没想到同时匹配,就在外面加个判断吧,哈哈。坐等大虾出现

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文