免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 3729 | 回复: 23
打印 上一主题 下一主题

[文本处理] 堆栈问题 [复制链接]

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-28 17:01 |只看该作者 |倒序浏览
本帖最后由 yestreenstars 于 2012-11-28 18:43 编辑

处理前:
{0},1,2,{3,4},{{{0,1},1,2},5,6,{7,8},9,0,{1,1},{2,2,3},0,{1,{2},3}},0,{1,1},0,0,{2,2},{0}

要求:
取出括号里的各个元素。

处理后:
0
3,4
0,1
1,2
5,6,
7,8
9,0,
1,1
2,2,3
0,
1,
2
3
1,1
2,2
0

注:聪明的你应该发现有些结果后面会多出一个逗号,并非我打错了。

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
2 [报告]
发表于 2012-11-28 22:27 |只看该作者
  1. perl -e '$str1="{0},1,2{3,4},{{{0,1},1,2},5,6,{7,8},9,0,{1,1},{2,2,3},0,{1,{2},3}},0,{1,1},0,0,{2,2},{0}"; while($str1 =~ /\{((.*?(?:([^{}]++|(?R)))*?))\}/g){$a=$1;while($a=~/([^{}]+)/g){$b=$1;$b =~ s/(^,?+)//g;next if($b=~m/^\s*(#|$)/);print "$b\n"}}'
  2. 0
  3. 3,4
  4. 0,1
  5. 1,2
  6. 5,6,
  7. 7,8
  8. 9,0,
  9. 1,1
  10. 2,2,3
  11. 0,
  12. 1,
  13. 2
  14. 3
  15. 1,1
  16. 2,2
  17. 0
复制代码

论坛徽章:
8
双子座
日期:2013-08-31 07:37:12金牛座
日期:2013-09-09 18:49:12处女座
日期:2013-09-23 11:43:14处女座
日期:2013-10-09 19:48:21狮子座
日期:2014-03-24 18:22:12丑牛
日期:2014-04-22 22:07:51申猴
日期:2014-06-12 21:54:13双鱼座
日期:2014-06-13 21:52:31
3 [报告]
发表于 2012-11-28 23:34 |只看该作者
能否说一下思路?回复 2# mcshell


   

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
4 [报告]
发表于 2012-11-28 23:37 |只看该作者
回复 3# kernel69


    这里的核心是平衡组
perlre:
PARNO is a sequence of digits (not starting with 0) whose value reflects the paren-number of the capture group to recurse to. (?R) recurses to the beginning of the whole pattern. (?0) is an alternate syntax for (?R). If PARNO is preceded by a plus or minus sign then it is assumed to be relative, with negative numbers indicating preceding capture groups and positive ones following. Thus (?-1) refers to the most recently declared group, and (?+1) indicates the next group to be declared. Note that the counting for relative recursion differs from that of relative backreferences, in that with recursion unclosed groups are included.

论坛徽章:
8
双子座
日期:2013-08-31 07:37:12金牛座
日期:2013-09-09 18:49:12处女座
日期:2013-09-23 11:43:14处女座
日期:2013-10-09 19:48:21狮子座
日期:2014-03-24 18:22:12丑牛
日期:2014-04-22 22:07:51申猴
日期:2014-06-12 21:54:13双鱼座
日期:2014-06-13 21:52:31
5 [报告]
发表于 2012-11-28 23:46 |只看该作者
英语不好的伤不起啊,不过还是要谢谢回复 4# mcshell


   

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
6 [报告]
发表于 2012-11-28 23:50 |只看该作者
回复 5# kernel69


    我也不好,但是一字一字的看,一遍一遍的实践,你就会明白的。perlre的确是吓退了很多人、
扯远了

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
7 [报告]
发表于 2012-11-29 00:10 |只看该作者
本帖最后由 blackold 于 2012-11-29 00:10 编辑

try:
  1. echo ....|sed '/{\([^{}]\+\)\(},\?\|{\)\(.*\)/{s//{\2\3\n\1/;s/{},\?//g;s/\(.*\)\n\(.*\)/\2\n\1/;P;D;};d'
复制代码

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
8 [报告]
发表于 2012-11-29 00:19 |只看该作者
回复 7# blackold


    黑哥V5

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
9 [报告]
发表于 2012-11-29 08:10 |只看该作者
  1. perl -le '$str="{0},1,2,{3,4},{{{0,1},1,2},5,6,{7,8},9,0,{1,1},{2,2,3},0,{1,{2},3}},0,{1,1},0,0,{2,2},{0}";
  2. $re1 = qr{(\{((?:(([^{}]+)|(?1)?(?4)(?1)?)))*\})};
  3. $re2 = qr{(?:(\{|\},))([^{}]+)(?=[{}])};
  4. while($str =~ m{$re1}g){$t=$1;while($t =~ m{$re2}g){print $2}}'
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
10 [报告]
发表于 2012-11-29 09:09 |只看该作者
@mcshell@blackold@yinyuemi你们都很棒~如果再来一个awk版本的就完美了~我昨天搞了一天都没搞出来~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP