首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Perl中Regex匹配的句子中单词/短语的标注

基于Perl中Regex匹配的句子中单词/短语的标注
EN

Stack Overflow用户
提问于 2013-07-19 04:23:59
回答 1查看 475关注 0票数 1

我有以下一句话:

代码语言:javascript
复制
zzzzzzz  microRNA146a xxx (miR-146a, mir-33c) xxxx wwwwww Breast Cancer zzzz mir-33c kkk

我想要做的是根据一些预定义的正则表达式规则来标记那个句子中的单词/短语。最后看起来是这样的:

代码语言:javascript
复制
zzzzzzz  [microRNA146a]<MIR-0> xxx ([miR-146a]<MIR-1>, [mir-33c]<MIR-2>) xxxx wwwwww [Breast Cancer] <CANCER-0> zzzz [mir-33c]<MIR-2> kkk.

请注意,在上面的输出中,满足规则的每个单词/短语都是按其发生的顺序进行索引的。

我被下面的代码困住了。正确的方法是什么?

代码语言:javascript
复制
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
my $text = 'zzzzzzz   microRNA146a xxx (miR-146a, mir-33c) xxxx wwwwww Breast Cancer zzzz';

# Rule 1 for miRNA definition 
my @mirlist = ($text =~ /( mir-\d+\w+| microRNA\d+)/xgi);

# Rule 2 for special words/phrases
my @spec = ($text =~ /(Breast Cancer)/gi);

# These arrays already preserve the order of occurrence
print Dumper \@mirlist ;
print Dumper \@spec ;

# Not sure how to proceed from here

*更新:*添加重新出现的miRNA并细化所需的答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-19 04:44:06

使用自己的转储和一个简单的for来迭代两个数组:

代码语言:javascript
复制
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;
my $text = 'zzzzzzz   microRNA146a xxx (miR-146a, mir-33c) xxxx microRNA146a wwwwww Breast Cancer aaaa Breast Cancer zzzz mir-33c kkk';

# Rule 1 for miRNA definition 
my $i = 0;
$text =~ s/(mir-\d\w+|microrna\d+\w?)/"[$1]<MIR-" . $i++ . ">"/gie;

# Rule 2 for special words/phrases
my $j = 0;
$text =~ s/(breast cancer)/"[$1]<CANCER-" . $j++ . ">"/gie;

print $text;

Live DEMO.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17738074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档