![](/img/trans.png)
[英]python regex trying to match the second occurrence of a set of words in a string
[英]regex match second occurrence of a string in Perl
我正在嘗試匹配perl中字符串的第一次和第二次出現。 輸入的前幾行(包含在@intersect中)為:
'gi|112807938|emb|CU075707.1|_Xenopus_tropicalis_finished_cDNA,_clone_TNeu129d01 C1:TCONS_00039972(XLOC_025068),_12.9045:32.0354,_Change:1.3118,_p:0.00025,_q:0.50752 C2:TCONS_00045925(XLOC_029835),_10.3694:43.8379,_Change:2.07985,_p:0.0004,_q:0.333824',
'gi|115528274|gb|BC124894.1|_Xenopus_laevis_islet-1,_mRNA_(cDNA_clone_MGC:154537_IMAGE:8320777),_complete_cds C1:TCONS_00080221(XLOC_049570),_17.9027:40.8136,_Change:1.18887,_p:0.00535,_q:0.998852 C2:TCONS_00092192(XLOC_059015),_17.8995:35.5534,_Change:0.990066,_p:0.0355,_q:0.998513',
'gi|118404233|ref|NM_001078963.1|_Xenopus_(Silurana)_tropicalis_pancreatic_lipase-related_protein_2_(pnliprp2),_mRNA C1:TCONS_00031955(XLOC_019851),_0.944706:5.88717,_Change:2.63964,_p:0.01915,_q:0.998852 C2:TCONS_00036655(XLOC_023660),_2.31819:11.556,_Change:2.31757,_p:0.0358,_q:0.998513',
我嘗試提取的信息是C1和C2的'Change:[value]'(由制表符分隔),使用以下命令:
#!/usr/bin/perl -w
use strict;
use File::Slurp;
use Data::Dumper;
$Data::Dumper::Sortkeys = 1;
my @log_change;
foreach (@intersect) {
chomp;
my @condition1_match = ($_ =~ /(C1:).*Change:(-?\d+\.\d+)/g);
my @condition2_match = ($_ =~ /(C2:).*Change:(-?\d+\.\d+)/g);
push @log_change, "@condition1_match\t@condition2_match";
}
print Dumper (\@log_change);
打印:
'C1: 2.07985 C2: 2.07985',
'C1: 0.990066 C2: 0.990066',
'C1: 2.31757 C2: 2.31757',
即C1和C2的值相同。 顯然,我的循環將C2的值存儲在@condition1_match
和@condition2_match
。
我的問題是:我如何指定我想要“改變:[值]”的第一次迭代被推到@condition1_match
和第二到@condition2_match
?
發生的情況是,您的正則表達式在具有.*
盡可能匹配。 您需要做的是使量詞變得懶惰(非貪婪),並通過添加問號來做到這一點?
它。
my @condition1_match = ($_ =~ /(C1:).*?Change:(-?\d+\.\d+)/g);
# ^
my @condition2_match = ($_ =~ /(C2:).*?Change:(-?\d+\.\d+)/g);
# ^
這樣,正則表達式將匹配最少的字符,直到它“看到” Change:(-?\\d+\\.\\d+)/g)
為止。
您可以在某些在線正則表達式網站上檢查您完全匹配的內容,例如this site 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.