Ich versuche, ein Muster zu passen: alles, was zwischen VD=
und dem ersten Auftreten von |
aus einer Zeichenkette, sagen tmp
, ist wie folgt:Wie erhält man ein Muster zwischen dem ersten Auftreten von zwei Zeichen in R?
tmp <- "PC=I;RS=128850544;RE=128850566;LEN=6;S1=36;S2=499.417;REP=2;VT=Ins;VD=SMO|CCDS5811.1|r.?|-|-|protein_coding:CDS:intron:insertion:intron_variant|SO:0000010:SO:0000316:SO:0000188:SO:0000667:SO:0001627;VC=intronic;VW=SMO|CCDS5811.1|r.?|-|-|protein_coding:CDS:intron:insertion:intron_variant|SO:0000010:SO:0000316:SO:0000188:SO:0000667:SO:0001627"
gene <- sub("^.*VD=([A-Za-z0-9]+)[|].*", "\\1", tmp)
gene
# [1] "SMO"
Aber wenn es keine VD=
oder |
im String , packt er die ganze Reihe:
tmp <- "PC=D;RS=72450731;RE=72450735;LEN=1;S1=72;S2=802.939;REP=3;VT=Del"
gene <- sub("^.*VD=([A-Za-z0-9]+)[|].*", "\\1", tmp)
gene
# [1] "PC=D;RS=72450731;RE=72450735;LEN=1;S1=72;S2=802.939;REP=3;VT=Del"
ich verstehe nicht, warum es die gesamte Zeichenfolge statt NA
auch greifen, wenn es keine VD=
oder |
Zeichen vorhanden. Gibt es eine Möglichkeit, ein Muster zwischen dem ersten Auftreten von zwei Zeichen zu erfassen und es zu drucken oder NA zu drucken, wenn das Muster nicht gefunden wird.
Jede Hilfe würde sehr geschätzt werden.
Danke!
zuerst 'match' und dann' greifen' – rock321987
'sub' /' gsub' greifen nichts, sie ** ersetzen **, und es gibt nichts in Ihrem 2. Fall ** zu ** ersetzen – eddi
verwenden ' Regmatches/Regexpr' oder besser noch verwenden Sie 'striadr :: str_extract' oder Freunde – eddi