+ -
当前位置:首页 → 问答吧 → 找出10行以内包含两个指定字符串的段落

找出10行以内包含两个指定字符串的段落

时间:2011-01-20

来源:互联网

本帖最后由 paktc 于 2011-01-20 11:27 编辑

在文本中,找出10行以内 里面有
"folder"也有"size"的段落。

比如:


QUOTE:
folder size

fsafdsa
f size
ds
fsd folder
f
sa s
fsd
fsd  folder
f
d346s  
f346
3521
f35
2365
4523161
dfs2355
6436
3147
2666666size 这个超出10行



1 : folder size <- 这一行有folder 和size
=======
1 : folder size <-
2 :
3 : fsafdsa
4 : f size         <- 这一段有folder 和size
=======
1 : folder size <-
2 :
3 : fsafdsa
4 : f size
5 : ds
6 : fsd folder <- 这一段有size 和folder
=======
4 : f size       <-
5 : ds
6 : fsd folder <- 这一段有size 和folder
=======

我只是……  偶然在搜索的时候想要用到这样的方式。
好像蛮有思考空间的。  如果说同时出现在同一行的话大概就是以上的情况
  貌似可以先筛选出所有包含字串A 和字串B的行号然后对比出来额,编写中

作者: paktc   发布时间: 2011-01-20

  1. use strict;

  2. my $str=join '^&*',<DATA>;
  3. $str=~s/(\r|\n)//g;
  4. my $i;
  5. $str=~m{(folder.*?size)(?{evalsub($1)})(?!)};
  6. $str=~m{(size.*?folder)(?{evalsub($1)})(?!)};

  7. sub evalsub(){
  8.         my $tmp=shift;
  9.         my @tmp=split /\^\&\*/,$tmp;
  10.         if($#tmp<9){
  11.                 print "第".$i++."个:\n";
  12.                 my $j=0;
  13.                 foreach(@tmp){
  14.                         print "row".$j++."\t: $_\n";
  15.                         }
  16.         }               
  17. }

  18. __DATA__
  19. folder size

  20. fsafdsa
  21. f size
  22. ds
  23. fsd folder
  24. f
  25. sa s
  26. fsd
  27. fsd  folder
  28. f
  29. d346s  
  30. f346
  31. 3521
  32. f35
  33. 2365
  34. 4523161
  35. dfs2355
  36. 6436
  37. 3147
  38. 2666666size
复制代码

作者: toniz   发布时间: 2011-01-20



QUOTE:
[quote]perl k.t
第0个:
row0    :folder size
第1个:
row0    :folder size
row1    :
row2    :fsafdsa
row3    :f size
第2个:
row0    :size
row1    :
row2    :fsafdsa
row3    :f size
row4    :ds
row5    :fsd folder
第3个:
row0    :size
row1    :ds
row2    :fsd folder
第4个:
row0    :size
row1    :ds
row2    :fsd folder
row3    :f
row4    :sa s
row5    :fsd
row6    :fsd  folder

[/quote]

作者: toniz   发布时间: 2011-01-20