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

太乙 发布于 2014/08/29 15:14
阅读 1K+
收藏 1

正常的整数分隔:

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

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

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

 

加载中
0
太乙
太乙
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|$))可以解释为不是非数字或不是末尾,还是加上括号不容易歧义。

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

0
岁月留魂
岁月留魂
比如12312312.13123这样带小数的分隔 :这个分割成什么样?
太乙
太乙
该评论暂时无法显示,详情咨询 QQ 群:912889742
太乙
太乙
12,312,312.13123
0
岁月留魂
岁月留魂
太高深了!您问题提的都有错误!s/(\d{1,3})(?= {?:\d{3})+(?!\d |$)/$1,/g
太乙
太乙
话说这个算比较经典的正则表达式,对着说明就能看懂的拉
太乙
太乙
手打的,失策失策,改回来拉=。=sorry
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部