2017-12-20 14 views
-1

Iのような文字列が形成座標:抽出はUCSC名

hg38_ct_tbrefGene_6787_NM_000029_1_range = CHR 1:230709995-230710853_5'pad = 0_3'pad = 0_strand = -_ repeatMasking =なしI座標を抽出したい

、上の例では:230709995と230710853。私は、文字列の前の部分は常に同じ長さを持っていないことを言及する必要があります。私はgsubが最善の選択だと思うが、私はそれを(あまりにも多くの "_")得ることができない。

さらに、この種の問題に対するパターンマッチ/ブック/ブログの提案は素晴らしいことでしょう。 ありがとう!

答えて

2

この目的のために、正規表現グループとキャプチャグループを使用することができます。詳細については、Webで「正規表現」または「正規表現」を検索するだけで、柔軟な検索パターンと抽出パターンを設定する方法をガイドするいくつかのサイトがあります。以下のように文字列の抽出は以下のようになります(座標は常にの範囲で始まると仮定します)。 gsubの代わりに、stringiパッケージのstri_extractなどを使用することもできます。

基を捕捉するための検索(括弧内のコンテンツ):
(^.*)任意の文字に続く文字列の先頭ゼロ回以上
(range.*:)範囲結腸続い任意の文字が続くゼロ回以上。
(\\d+) 1桁以上
(\\D)一つの非数字文字
(\\d+) 1桁以上
(.*$)任意の文字0回以上の文字列

抽出の終わりまで:
\\3 3群、すなわち、第一(\\d+)
\\5捕捉群5、すなわち、第二(\\d+)

string <- "hg38_ct_tbrefGene_6787_NM_000029_1_range=chr1:230709995-230710853_5'pad=0_3'pad=0_strand=-_repeatMasking=none" 

strsplit(gsub("(^.*)(range.*:)(\\d+)(\\D)(\\d+)(.*$)", "\\3 \\5", string , perl = TRUE), " ") 
# [[1]] 
# [1] "230709995" "230710853" 
を捕捉