免费注册 查看新帖 |

Chinaunix

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

多重关键字匹配定位 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-31 18:28 |只看该作者 |倒序浏览
现有以下的文本信息

  1………………A………………
  2………………………………
  3…………A…………………………
  4………C…………………
  5…………B…………………………
  6…………………………
  7…………C………………
  8…………A……………………
  9…………………………
  10…………………………
  11………………………………
  12…………………………
  13…………B………………
  14…………A…………
  15………………C…………

  目标:用perl提取出从关键字A到关键字C之间且包含关键字B的信息, 且关键字A和关键字B之间的距离最短.(在上述例子中,就是第3行到第7行的信息。在实际文本中,没有上述的行号)
  我的想法是:提取每个关键字A所在行号,提取每个关键字B所在的行号,然后计算出关键字A和关键字B行号之间的最小值,同时要求关键字B的行号一定要大于关键字A的行号(即不能是第13行到第14行)。在此基础上计算出关键字A到关键字C的距离,然后提取相应的信息。这样就可以排除第14行到15行的相关文本,同时也不会只提取第3到第4行的信息。
  我目前看到的程序,都是每个关键字对应一个行号.所以请教各位高手,该如何解决这个问题。

论坛徽章:
5
亥猪
日期:2013-10-15 13:41:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34申猴
日期:2013-10-28 10:55:45辰龙
日期:2013-10-31 13:29:29丑牛
日期:2014-02-14 11:25:54
2 [报告]
发表于 2013-10-31 19:01 |只看该作者
設定幾個狀態搞個狀態遷移圖出來就差不多了吧

论坛徽章:
0
3 [报告]
发表于 2013-10-31 19:06 |只看该作者
请教楼上,如何做perl的状态迁移图?我是Perl的初学者。

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
4 [报告]
发表于 2013-10-31 19:35 |只看该作者
  1. qr/A[^AB]+B[^C]+C/
复制代码

论坛徽章:
0
5 [报告]
发表于 2013-10-31 20:57 |只看该作者
好像不对呀!我编了以下程序
my $file1="d:\\test\\test.txt";
open (INPUT, "<$file1")         or die "Couldn't open $file1 forr reading: $!\n";
my $buf = <INPUT>;
  if ($buf =~qr/A[^AB]+B[^C]+C/){
   open OUTPUT, ">d:\\testout\\test1.txt" or die;
   print OUTPUT "$buf";
   close OUTPUT or die;
}
但是运行出来的结果和原先的表格一样。请教我的程序那里有问题?谢谢!

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


    $/ 设置为空,读取整个文本;
    默认是\n

论坛徽章:
0
7 [报告]
发表于 2013-10-31 21:19 |只看该作者
回复 6# mcshell


    请教该如何修改?我刚开始学perl,很多命令还非常不熟悉。谢谢!

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
8 [报告]
发表于 2013-10-31 21:45 |只看该作者
  1. perl -lne  'BEGIN{$/=undef};1 while(/(A[^AB]+B[^C]+C)(?{print $1})/g)' test.txt
复制代码
回复 7# zhuzhujd


   

论坛徽章:
0
9 [报告]
发表于 2013-10-31 21:49 |只看该作者
mcshell 发表于 2013-10-31 21:45
回复 7# zhuzhujd

因为类似的文本还有1000多个,我想用循环语句一次做完。你的方法只能做一个文件。可否请帮忙调试一下上面的语句。谢谢!

论坛徽章:
0
10 [报告]
发表于 2013-10-31 22:30 |只看该作者
回复 8# mcshell

运行了上述程序,返回结果为:
can't find string terminator "'" anywhere before EOF at -e line 1.
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP