用Perl/R/Python提取正則表達(dá)式匹配到的字符串

這個(gè)應(yīng)用場(chǎng)景挺多的

比如我想提取出注釋信息中previous_id對(duì)應(yīng)的基因ID,乍一看以為可以用cut命令一點(diǎn)一點(diǎn)切出來(lái),但是又發(fā)現(xiàn)previous_id并不都是緊挨著ID列,并且derived_from對(duì)應(yīng)的ID也需要提取出來(lái)。這個(gè)時(shí)候只能用到正則匹配了。

Perl

$ cat test.pl
#! /usr/bin/perl
use warnings;
use strict;

my $file_name = $ARGV[0];
open my $in_fh, "<", "$file_name";
while (<$in_fh>) {
    chomp $_;
    my @one_line = (split("\t", $_));
    my @old_name = ( $one_line[8] =~ /TraesCS[1-7][A-D]01G[0-9]{6}[CHL]{0,2}/g );
    print "@old_name\n";
}
close $in_fh;

$ perl test.pl test.gff3 | head -n 5
TraesCS1A01G000100
TraesCS1A01G000200
TraesCS1A01G000300
TraesCS1A01G000400
TraesCS1A01G000500

需要注意的是這一句:my @old_name = ( $one_line[8] =~ /TraesCS[1-7][A-D]01G[0-9]{6}[CHL]{0,2}/g );我目前的認(rèn)識(shí)是必須用數(shù)組來(lái)接收野蝇,并且加上g,不管是匹配一次還是多次。

R

在R里面操作很簡(jiǎn)單绕沈,用到的是stringr包锐想。

library(tidyverse)
a <- read.table("test.gff3",header = F,sep = "\t")
b <- as.character(a$V9)
#提取出第一次匹配的內(nèi)容
c <- str_extract(b,"TraesCS[1-7][ABD]01G[0-9]{6}[CHL]{0,2}")
#提取出所有匹配的內(nèi)容
#以矩陣形式返回所有匹配到的內(nèi)容,并將每一行元素個(gè)數(shù)統(tǒng)一乍狐,不夠的用""空字符串表示
d <- str_extract_all(b,"TraesCS[1-7][ABD]0[12]G[0-9]{6}[CHL]{0,2}",simplify = T) #此處的正則表達(dá)式有小改動(dòng)赠摇,以便演示能匹配到多個(gè)的情況
> head(c)
[1] "TraesCS1A01G000100" "TraesCS1A01G000200" "TraesCS1A01G000300" "TraesCS1A01G000400" "TraesCS1A01G000500" "TraesCS1A01G000600"
> head(d)
     [,1]                 [,2]                 [,3]                
[1,] "TraesCS1A02G000100" "TraesCS1A01G000100" "TraesCS1A02G000100"
[2,] "TraesCS1A02G000200" "TraesCS1A01G000200" "TraesCS1A02G000200"
[3,] "TraesCS1A02G000300" "TraesCS1A01G000300" "TraesCS1A02G000300"
[4,] "TraesCS1A02G000400" "TraesCS1A01G000400" "TraesCS1A02G000400"
[5,] "TraesCS1A02G000500" "TraesCS1A01G000500" "TraesCS1A02G000500"
[6,] "TraesCS1A02G000600" "TraesCS1A01G000600" "TraesCS1A02G000600"

Python

$ cat test.py
import re

for line in open('./test.gff3'):
    all = re.findall("TraesCS[1-7][A-D]0[12]G[0-9]{6}[CHL]{0,2}", line)
    for i in all:
        print(i,end="\t")
    print()
$ python3 test.py
TraesCS1A02G000100  TraesCS1A01G000100  TraesCS1A01G000200  TraesCS1A02G000100  
TraesCS1A02G000200  TraesCS1A01G000200  TraesCS1A02G000200  
TraesCS1A02G000300  TraesCS1A01G000300  TraesCS1A02G000300  
TraesCS1A02G000400  TraesCS1A01G000400  TraesCS1A02G000400  
TraesCS1A02G000500  TraesCS1A01G000500  TraesCS1A02G000500
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市浅蚪,隨后出現(xiàn)的幾起案子藕帜,更是在濱河造成了極大的恐慌,老刑警劉巖惜傲,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洽故,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡操漠,警方通過(guò)查閱死者的電腦和手機(jī)收津,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門饿这,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)浊伙,“玉大人,你說(shuō)我怎么就攤上這事长捧∠桑” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵串结,是天一觀的道長(zhǎng)哑子。 經(jīng)常有香客問(wèn)我,道長(zhǎng)肌割,這世上最難降的妖魔是什么卧蜓? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮把敞,結(jié)果婚禮上弥奸,老公的妹妹穿的比我還像新娘。我一直安慰自己奋早,他們只是感情好盛霎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著耽装,像睡著了一般愤炸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掉奄,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天规个,我揣著相機(jī)與錄音,去河邊找鬼。 笑死绰姻,一個(gè)胖子當(dāng)著我的面吹牛枉侧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播狂芋,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼榨馁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了帜矾?” 一聲冷哼從身側(cè)響起翼虫,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屡萤,沒想到半個(gè)月后珍剑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡死陆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年招拙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片措译。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡别凤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出领虹,到底是詐尸還是另有隱情规哪,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布塌衰,位于F島的核電站诉稍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏最疆。R本人自食惡果不足惜杯巨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望努酸。 院中可真熱鬧服爷,春花似錦、人聲如沸蚊逢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)烙荷。三九已至镜会,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間终抽,已是汗流浹背戳表。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工桶至, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人匾旭。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓镣屹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親价涝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子女蜈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容