免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 黑色阳光_cu
打印 上一主题 下一主题

出道正则难题,数字千分点 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-03-14 01:53 |只看该作者
回复 10# liyangole


     \K         Keep the stuff left of the \K, don't include it in $&

论坛徽章:
0
12 [报告]
发表于 2011-03-14 12:51 |只看该作者
我也单行一下
  1. my $v = "12321347317347317.12734712347313471324";
  2. $v =~ s/(?<=\d)(?=(\d\d\d)+\.)|(?<=\.\d\d\d)(?!$)|(?<=\G\d\d\d)(?!\.|$)/,/g;print $v;
复制代码
也x一个,呵呵
  1. my $v = "12321347317347317.12734712347313471324";
  2. $v =~ s/(?<=\d)(?=(\d\d\d)+\.)    #处理整数部分
  3.         |
  4.         (?<=\.\d\d\d)(?!$)        #处理小数点后面第一次千分位,例子中就是.127后面的逗号
  5.         |
  6.         (?<=\G\d\d\d)(?!\.|$)     #处理小数点后第一个千分位以后的内容
  7.         /,/gx;
  8. print $v;
复制代码

论坛徽章:
0
13 [报告]
发表于 2011-03-14 13:25 |只看该作者
我也单行一下也x一个,呵呵
珞水的大叔 发表于 2011-03-14 12:51


你试试 my $v = "12321347317347317";

论坛徽章:
0
14 [报告]
发表于 2011-03-14 15:12 |只看该作者
while(($v=~s/(\d{1,})(\d{3})([\._])/\1_\2\3/)||($v=~s/([\._])(\d{3})(\d{1,})/\1\2_\3/)||($v=~s/(\d{1,})(\d{3})$/\1_\2/)){}
这样也算一句话吧。。。。。。

论坛徽章:
0
15 [报告]
发表于 2011-03-14 17:30 |只看该作者
回复 13# 黑色阳光_cu


    那就这样,呵呵
  1. $v = "12321347317347317";
  2. $v =~ s/(?<=^\d)(?=(\d\d\d)+$)     #处理不含小数点的情况
  3.         |
  4.         (?<=^\d\d)(?=(\d\d\d)+$)   #处理不含小数点的情况
  5.         |
  6.         (?<=\d)(?=(\d\d\d)+\.)    #处理整数部分
  7.         |
  8.         (?<=\.\d\d\d)(?!$)        #处理小数点后面第一次千分位,例子中就是.127后面的逗号
  9.         |
  10.         (?<=\G\d\d\d)(?!\.|$)     #处理小数点后第一个千分位以后的内容,或者不含小数点的情况
  11.         /,/gx;
  12. print $v;
复制代码

论坛徽章:
0
16 [报告]
发表于 2011-03-15 10:03 |只看该作者
回复  黑色阳光_cu


    那就这样,呵呵
珞水的大叔 发表于 2011-03-14 17:30



   
这次对了

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
17 [报告]
发表于 2011-03-15 10:54 |只看该作者
请写一句正则,把 $v 变成 12,321,347,317,347,317.127,347,123,473,134,713,24 。也就是说,按千分点把数字 ...
黑色阳光_cu 发表于 2011-03-11 15:18


这是《Mastering Regular Expressions, 2nd Edition》在讲lookbehind和lookahead的时候使用的例子。详见英文版的2.3.5.4章
  1. ~ s/(?<=\d)(?=(\d\d\d)+(?!\d))/,/g
复制代码

论坛徽章:
0
18 [报告]
发表于 2011-03-15 11:35 |只看该作者
这是《Mastering Regular Expressions, 2nd Edition》在讲lookbehind和lookahead的时候使用的例子。详见 ...
py 发表于 2011-03-15 10:54


你没看明白需求。这个regex只能拿来处理小数点之前的部分。因为perl不支持任意深度的lookbehind,所以最恶心的是如何处理小数点之后的部分。如果可以分开写,当然好处理,MRE上也给的有例子,使用$1,进行全局替换就行了。

论坛徽章:
0
19 [报告]
发表于 2011-03-15 12:38 |只看该作者
回复 16# 黑色阳光_cu


    顺便请教一下, \K 究竟用来作什么,它不把左边的内容存到$&里面是为了提高效率么?

论坛徽章:
0
20 [报告]
发表于 2011-03-17 22:59 |只看该作者
回复 4# iLRainyday


    弱弱地问一句:?=   和  ?<=  是什么意思?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP