免费注册 查看新帖 |

Chinaunix

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

[文本处理] 模式匹配的问题求教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-03 14:11 |只看该作者 |倒序浏览
本帖最后由 cxrfly 于 2014-08-03 14:34 编辑

我有一个字符串匹配的问题,求各位指点下。
1、字符段,假设为$protein
jgi|Physo3|554134|estExt_Genewise1Plus.C_1_t70226
MPHPRFPKIEIQELRDDFIRFELSETDASVANAIRRVMISEVPTLAIDLVSIEINTSVMTDEFLAHRLGM
IPLNFDGGLENFRQRFVYSADCDCDENCPNCSVEFSLDVTADNGVLSVTSEALKSSDPYIRPVNFSSEEE
LNNTQDSGVIIAKLGPGQRLRLSAIAKLGIGKEHAKWSPVAVATYMYDPIITLNQAVLSTYTPEQKAELY
KSCPTEVYETDENYEQVRCCAWKVDFILEEAD*

2、利用$ID=~/(.*\n)/获取了第一行jgi|Physo3|554134|estExt_Genewise1Plus.C_1_t70226,即$ID=jgi|Physo3|554134|estExt_Genewise1Plus.C_1_t70226。现在想利用$protein=~s/$ID//,却发现仅有jgi被去掉,打印显示$protein=|Physo3|554134|estExt_Genewise1Plus.C_1_t70226MPHPRFPKIEIQELRDDFIRFELSETDASVANAIRRVMISEVPTLAIDLVSIEINTSVMTDEFLAHRLGMIPLNFDGGLENFRQRFVYSADCDCDENCPNCSVEFSLDVTADNGVLSVTSEALKSSDPYIRPVNFSSEEELNNTQDSGVIIAKLGPGQRLRLSAIAKLGIGKEHAKWSPVAVATYMYDPIITLNQAVLSTYTPEQKAELYKSCPTEVYETDENYEQVRCCAWKVDFILEEAD*

请问,这个模式匹配$protein=~s/$ID//问题在哪里?本意是去掉第一行的ID的,留下蛋白序列的,百思不得其解阿。
小白问题,请多指点!谢谢拉

论坛徽章:
0
2 [报告]
发表于 2014-08-03 14:43 |只看该作者
求帮忙阿,是不是管道符号的问题?但是第一次匹配就没有问题阿,想不通

论坛徽章:
3
天蝎座
日期:2013-12-10 19:37:11酉鸡
日期:2014-08-04 20:05:38双鱼座
日期:2014-08-09 21:53:54
3 [报告]
发表于 2014-08-03 15:15 |只看该作者
回复 1# cxrfly


    这个是perl的语法吗? 我不太熟啊,如果是perl的话,可以发到perl版去问一下。


    我仅从正则表达式的角度来说一下,你既然使$ID的值成为了
jgi|Physo3|554134|estExt_Genewise1Plus.C_1_t70226
那么在执行:
  1. $protein=~s/$ID//
复制代码
时,实际执行的是:
  1. $protein=~s/jgi|Physo3|554134|estExt_Genewise1Plus.C_1_t70226//
复制代码
而正则表达式中的"|"大约相当于“或”,所以该正则表达式的意思是:
jgi或者Physo3或者554134或者estExt_Genewise1Plus.C_1_t70226替换为空。而且你没有加任何的标志位,所以仅替换第一个成功匹配的字符串,也就得到了你的结果。
(如果你加上s标志位的话,你会发现这几项应该都被删掉了 第一行留下来的应该是多个"|")

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
4 [报告]
发表于 2014-08-03 15:21 |只看该作者
回复 1# cxrfly


    try:
  s/\Q$ID\E//
  

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
5 [报告]
发表于 2014-08-03 15:22 |只看该作者
另外,如果想把protein id那行删除
$protein =~ s/^[^\n]+\n//'

论坛徽章:
3
天蝎座
日期:2013-12-10 19:37:11酉鸡
日期:2014-08-04 20:05:38双鱼座
日期:2014-08-09 21:53:54
6 [报告]
发表于 2014-08-03 15:24 |只看该作者
回复 4# yinyuemi


    这个是perl的语法吗?\Q和\E分别是啥意思?

论坛徽章:
0
7 [报告]
发表于 2014-08-03 15:45 |只看该作者
回复 5# yinyuemi


    您说的这2个模式都可以。确实是我在|管道符号上犯错了。谢谢

论坛徽章:
0
8 [报告]
发表于 2014-08-03 15:47 |只看该作者
回复 3# 欧阳西风


    谢谢,确实我对|了解太少了,这个地方是您说的这样,是“或”替换的结果。

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
9 [报告]
发表于 2014-08-03 16:03 |只看该作者
回复 6# 欧阳西风


    嗯,perl 的正则语法,具体你查下perldoc re吧

论坛徽章:
0
10 [报告]
发表于 2014-08-03 16:04 |只看该作者
类似$ID1=jgi|Physo3|554134|estExt_Genewise1Plus.C_1_t70226,
$ID2=jgi|Physo3|554134|estExt_Genewise1Plus.C_1_t70226这样的字符串如何进行匹配 阿?好像用$ID1=~/$ID2/或者 $ID1==$ID2都不行阿?求指点
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP