当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 38 篇帖子 ]  前往页数 1, 2, 3  下一页
作者 内容
1 楼 
 文章标题 : [问题]一个关于perl 的正则表达式的问题
帖子发表于 : 2008-08-04 9:37 
头像

注册: 2008-03-23 17:01
帖子: 3340
送出感谢: 0 次
接收感谢: 2
perl 用正则表达式对一个字符串进行匹配时,如果匹配结果有好几个,那该把这好几个结果都输出/储存到变量中呢?比如,匹配一段字符串中(如atggcagttggtacctaagcattdggtacccgtta)以“ggtacc”结尾的长度为10的子字符串(相当于酶切的操作),这个字符串中有好几个满足条件的子字符串,那当如何将它们都输出呢?
我知道perl 的正则表达式有一个用“()”返回匹配字符串的功能,把匹配的放进变量$1中,可是这样只显示一个匹配的结果,怎么把所有匹配的都储存起来呢?


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-08-04 9:54 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
perl不懂,不过用shell 和 awk倒是简单

代码:
<(︶︿︶)>[~]:tag=ggtacc
<(︶︿︶)>[~]:echo atggcagttggtacctaagcattdggtacccgtta |awk -F"$tag" '{for (i=1;i<=NF;i++)print $i;}' |sed "s/$/$tag/"
atggcagttggtacc
taagcattdggtacc
cgttaggtacc


ps:lz是搞生物的么?


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-08-04 10:26 
头像

注册: 2008-03-23 17:01
帖子: 3340
送出感谢: 0 次
接收感谢: 2
xiooli 写道:
perl不懂,不过用shell 和 awk倒是简单

代码:
<(︶︿︶)>[~]:tag=ggtacc
<(︶︿︶)>[~]:echo atggcagttggtacctaagcattdggtacccgtta |awk -F"$tag" '{for (i=1;i<=NF;i++)print $i;}' |sed "s/$/$tag/"
atggcagttggtacc
taagcattdggtacc
cgttaggtacc


ps:lz是搞生物的么?

哦,这样阿,偶可以参考一下阿,多谢了……
我是学生物的,数量遗传方向……


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-08-04 10:39 

注册: 2008-01-31 16:55
帖子: 99
送出感谢: 0 次
接收感谢: 0 次
sed里有匹配第几个文本的参数,perl试了一下,居然不这么表示。
还请各位给出个正规的方法


最后由 wuchuanren 编辑于 2008-08-04 12:49,总共编辑了 1 次

页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-08-04 10:47 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
grep -o 不好吗


_________________
● 鸣学


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-08-04 11:02 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
不好意思lz,我原先那个有点问题,就是最后那条链多加了个tag,再来一个超级简单的
代码:
<(︶︿︶)>[~]:tag=ggtacc
<(︶︿︶)>[~]:echo atggcagttggtacctaagcattdggtacccgtta |sed "s/$tag/&\n/g"
atggcagttggtacc
taagcattdggtacc
cgtta


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-08-04 15:33 
头像

注册: 2008-03-23 17:01
帖子: 3340
送出感谢: 0 次
接收感谢: 2
xiooli 写道:
不好意思lz,我原先那个有点问题,就是最后那条链多加了个tag,再来一个超级简单的
代码:
<(︶︿︶)>[~]:tag=ggtacc
<(︶︿︶)>[~]:echo atggcagttggtacctaagcattdggtacccgtta |sed "s/$tag/&\n/g"
atggcagttggtacc
taagcattdggtacc
cgtta

哦,没关系,多谢了。不过,perl 里面好像是没有echo 的,我再想一想…… :roll:


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2008-08-05 20:34 

注册: 2006-05-01 12:29
帖子: 60
地址: zju
送出感谢: 0 次
接收感谢: 0 次
可以使用global match
代码:
#!/usr/bin/perl
use strict;
use warnings;
my $data = "atggcagttggtacctaagcattdggtacccgtta";
my @match = $data =~ m/([atcgdu]{4}ggtacc)/g;
print "$_\n" foreach @match;

引用:
agttggtacc
attdggtacc

but why?
碱基里面有d?


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2008-08-05 20:49 
头像

注册: 2008-03-23 17:01
帖子: 3340
送出感谢: 0 次
接收感谢: 2
heejun 写道:
可以使用global match
代码:
#!/usr/bin/perl
use strict;
use warnings;
my $data = "atggcagttggtacctaagcattdggtacccgtta";
my @match = $data =~ m/([atcgdu]{4}ggtacc)/g;
print "$_\n" foreach @match;

引用:
agttggtacc
attdggtacc

but why?
碱基里面有d?

貌似结果不正确,我想要的结果是要显示几个字符串的,难道要用到多维数组?不对,维数又不能确定,容我想想……


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2008-08-05 21:20 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
banban 写道:
xiooli 写道:
不好意思lz,我原先那个有点问题,就是最后那条链多加了个tag,再来一个超级简单的
代码:
<(︶︿︶)>[~]:tag=ggtacc
<(︶︿︶)>[~]:echo atggcagttggtacctaagcattdggtacccgtta |sed "s/$tag/&\n/g"
atggcagttggtacc
taagcattdggtacc
cgtta

哦,没关系,多谢了。不过,perl 里面好像是没有echo 的,我再想一想…… :roll:
lz难道一定得用perl吗?用bash或者awk简单很多啊,特别是awk用来处理数据简直神了。


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2008-08-05 21:28 
头像

注册: 2008-03-23 17:01
帖子: 3340
送出感谢: 0 次
接收感谢: 2
xiooli 写道:
lz难道一定得用perl吗?用bash或者awk简单很多啊,特别是awk用来处理数据简直神了。

不是我非要用perl 的阿,是老师布置的一道作业题,呵呵,不好意思……


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2008-08-05 21:30 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
banban 写道:
xiooli 写道:
lz难道一定得用perl吗?用bash或者awk简单很多啊,特别是awk用来处理数据简直神了。

不是我非要用perl 的阿,是老师布置的一道作业题,呵呵,不好意思……
:em65 ,你们老师肯定是perl饭咯?


页首
 用户资料  
 
13 楼 
 文章标题 : Re: [问题]一个关于perl 的正则表达式的问题
帖子发表于 : 2008-08-05 21:38 
头像

注册: 2007-03-13 11:23
帖子: 1343
送出感谢: 0 次
接收感谢: 0 次
banban 写道:
perl 用正则表达式对一个字符串进行匹配时,如果匹配结果有好几个,那该把这好几个结果都输出/储存到变量中呢?比如,匹配一段字符串中(如atggcagttggtacctaagcattdggtacccgtta)以“ggtacc”结尾的长度为10的子字符串(相当于酶切的操作),这个字符串中有好几个满足条件的子字符串,那当如何将它们都输出呢?
我知道perl 的正则表达式有一个用“()”返回匹配字符串的功能,把匹配的放进变量$1中,可是这样只显示一个匹配的结果,怎么把所有匹配的都储存起来呢?

之后的依次是$2,$3,$4,$5.
我是从ruby这们语法和perl和类似的语言想到的.后来看了perl handbook.
我本身不会perl
引用:
Perl 的正则表达式中如果出现 () ,则发生匹配或替换后 () 内的模式被 Perl 解释器自动依次赋给系统 $1, $2 ...... 请看下面的例子:



$string = "I love perl";

$string =~ s/(love)/<$1>;/; # 此时 $1 = "love",并且该替换的结果是将 $string 变为 "I <love>; perl"

$string = "i love perl";

$string =~ s/(i)(.*)(perl)/<$3>;$2<$1>;/; # 这里 $1 = "i",$2 = " love ",$3 = "perl",并且替换后 $string 变为 "<perl>; love <i>;"




_________________
"We are all in the mud, but some of us are looking at the stars." (Oscar Wilde)
We are not born for ourselves.
人生天地间,并非为自己
Homepage:http://sites.google.com/site/polarisnotme/


最后由 kofshower 编辑于 2008-08-05 21:46,总共编辑了 1 次

页首
 用户资料  
 
14 楼 
 文章标题 :
帖子发表于 : 2008-08-05 21:42 
头像

注册: 2008-03-23 17:01
帖子: 3340
送出感谢: 0 次
接收感谢: 2
xiooli 写道:
banban 写道:
:em65 ,你们老师肯定是perl饭咯?

perl饭是什么意思阿?


页首
 用户资料  
 
15 楼 
 文章标题 :
帖子发表于 : 2008-08-05 21:43 
头像

注册: 2007-03-13 11:23
帖子: 1343
送出感谢: 0 次
接收感谢: 0 次
xiooli 写道:
banban 写道:
xiooli 写道:
lz难道一定得用perl吗?用bash或者awk简单很多啊,特别是awk用来处理数据简直神了。

不是我非要用perl 的阿,是老师布置的一道作业题,呵呵,不好意思……
:em65 ,你们老师肯定是perl饭咯?

perl 饭 == perl fans
很多时候脚本语言干的事情比命令还要简单啊
比如ruby -p执行语句 -l loop全部文件 -i备份,而且里面还可以直接调用脚本命令的


_________________
"We are all in the mud, but some of us are looking at the stars." (Oscar Wilde)
We are not born for ourselves.
人生天地间,并非为自己
Homepage:http://sites.google.com/site/polarisnotme/


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 38 篇帖子 ]  前往页数 1, 2, 3  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译