Regex 在Perl中基于正则表达式匹配标记句子中的单词/短语

Regex 在Perl中基于正则表达式匹配标记句子中的单词/短语,regex,perl,Regex,Perl,我有以下一句话: zzzzzzz microRNA146a xxx (miR-146a, mir-33c) xxxx wwwwww Breast Cancer zzzz mir-33c kkk 我想做的是在其中标记单词/短语 基于预定义正则表达式规则的语句。 最后看起来是这样的: zzzzzzz [microRNA146a]<MIR-0> xxx ([miR-146a]<MIR-1>, [mir-33c]<MIR-2>) xxxx wwwwww [Bre

我有以下一句话:

zzzzzzz  microRNA146a xxx (miR-146a, mir-33c) xxxx wwwwww Breast Cancer zzzz mir-33c kkk
我想做的是在其中标记单词/短语 基于预定义正则表达式规则的语句。 最后看起来是这样的:

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.

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

使用您自己的转储,使用简单的
for
对2个数组进行迭代:

#!/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;
#/usr/bin/perl
严格使用;
使用警告;
使用数据::转储程序;
我的$text='zzzzzzzmicrorna146a xxx(miR-146a,miR-33c)xxxx microRNA146a wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww;
#miRNA定义规则1
我的$i=0;
$text=~s/(mir-\d\w+| microrna\d+\w?/“[$1]”/gie;
#特殊单词/短语的规则2
我的$j=0;
$text=~s/(乳腺癌)/“[$1]”/gie;
打印$text;

非常感谢。假设在句末出现另一个
mir-33c
。现在它打印
[[mir-33c]]
我如何修改您的代码,使其只输出
[mir-33c]
[mir-33c]
。以下是测试代码:@neversaint已经用一个更简单的代码更新了我的答案,它不会因重复出现而失败。非常感谢!对不起,有没有办法把这两条规则(针对癌症和miRNA)分成不同的代码行?我还有更多的规则要添加。@neversaint只是像平常一样拆分成2个正则表达式。@neversaint这没关系,很高兴了解我不知道的修饰符e。
#!/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;