免费注册 查看新帖 |

Chinaunix

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

新人问问如何提取文件里字符 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-05-25 22:58 |只看该作者 |倒序浏览
文件如下所示:



我要提取的是两个"""中间的内容

比如第一对""" """ 中的内容与第二对""" """中的内容

用foreach while听文件好像都 是一行一行打印的,
想到的方法是, 把一个文件读进一个变量
再(""".*?""")(""".*?"""), 之后打印$1, $2, 好像不行~~~
把文件读进一个变量提示很多错误~~

论坛徽章:
0
2 [报告]
发表于 2016-05-25 23:01 |只看该作者
写了一个这样的, 关键是"""之后与另一个"""之前的要怎么提取?

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
3 [报告]
发表于 2016-05-25 23:38 |只看该作者
这里是 perl 板块, python 问题应该去 python 板块提问.

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
4 [报告]
发表于 2016-05-26 00:13 |只看该作者
$/=undef; $_ = <>; print join "\n--\n", /\s(["]{3}.+?["]{3})/sg

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
5 [报告]
发表于 2016-05-26 00:21 |只看该作者
回复 4# RE_HASH
大神, 向您请教个问题: (我开始理解错了, 以为是问 python 问题了)
比如只提取 第一对 """ 到 第二对 """ 之间的文本, 如果按行读取的话, 咋整啊. 谢谢...

   

论坛徽章:
0
6 [报告]
发表于 2016-05-26 00:40 |只看该作者
回复 4# RE_HASH

只看了小骆驼, 请问$/=....这个什么意思?

   

论坛徽章:
0
7 [报告]
发表于 2016-05-26 00:47 |只看该作者
回复 4# RE_HASH
请问可否详细说说?
现在新人学PERL都不知去哪学习了, 都英文资料。。。。。
提问都不知去哪提问。。。

   

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
8 [报告]
发表于 2016-05-26 06:25 |只看该作者
前两句把文件整个读入到$_, 第三句匹配三个引号之间的内容并打印。单行处理较罗嗦,你的数据是源代码所以不会太长,一并处理方便些。

论坛徽章:
3
摩羯座
日期:2013-09-04 12:01:36申猴
日期:2013-10-23 12:12:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34
9 [报告]
发表于 2016-05-26 12:25 |只看该作者
  1. use strict;

  2. my $s;
  3. my @recode;
  4. while(<DATA>){
  5.         chomp($_);
  6.         $s = $s . $_ . "--NEWLINE--";
  7. }

  8. while(1){
  9.         if($s =~ /"""(.*?)"""/){
  10.                 my $t = $1;
  11.                 $t =~ s/--NEWLINE--/\n/g;
  12.                 unshift @recode, $t;
  13.                 $s =~ s/""".*?"""//;
  14.                 next;
  15.         }
  16.         last;
  17. }

  18. for(@recode){
  19.         print "\ndebug-- ".$_."\n";
  20. }


  21. __DATA__
  22. adfadf
  23. adfasdfa
  24.   """
  25.   yxm.hah
  26.   123
  27.   fdfdf
  28.   """
  29. adfadfadfgagsa
  30. """yxmyxm"""
  31. fsadfasdfa
复制代码

论坛徽章:
3
摩羯座
日期:2013-09-04 12:01:36申猴
日期:2013-10-23 12:12:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34
10 [报告]
发表于 2016-05-26 12:29 |只看该作者
我把换行符替换成 --NEWLINE-- ,然后用正则抓取抓完就清除掉 这样避免第二个符合和第三个符号中间的字符串被抓出来
抓取后再把 --NEWLINE-- 替换成 换行符
记录都在 @recode 中
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP