इस स्ट्रिंग को देखते हुए पहले सभी लौट:regex - दूसरे घटना
DNS000001320_309.0/121.0_t0
मैं कैसे "_" की दूसरी घटना से पहले सब कुछ वापसी होगी?
DNS000001320_309.0/121.0
मैं आर
धन्यवाद उपयोग कर रहा हूँ।
इस स्ट्रिंग को देखते हुए पहले सभी लौट:regex - दूसरे घटना
DNS000001320_309.0/121.0_t0
मैं कैसे "_" की दूसरी घटना से पहले सब कुछ वापसी होगी?
DNS000001320_309.0/121.0
मैं आर
धन्यवाद उपयोग कर रहा हूँ।
मुझे लगता है कि यह (_
के अंतिम घटना befor सब कुछ मैच के लिए regex) कार्य कर सकता:
_([^_]*)$
उदाहरण के लिए:
> sub('_([^_]*)$', '', "DNS000001320_309.0/121.0_t0")
[1] "DNS000001320_309.0/121.0"
हाँ, अगर रेगेक्स-पथ चल रहा है, तो 'उप' 'gsub' से अधिक उपयुक्त होगा। –
यदि दो अंडरस्कोर हैं तो यह दूसरे अंडरस्कोर से आगे का चयन करेगा, हालांकि जाहिर है कि ओपी से कोई फर्क नहीं पड़ता है, इसलिए मैं इसे केवल पोस्टरिटी के लिए इंगित करता हूं। – joran
हाँ, अच्छा बिंदु @ जोरन। यह ओपी के लिए महत्वपूर्ण हो सकता है, लेकिन वह इसके बारे में पता नहीं हो सकता है। –
व्यक्तिगत रूप से, मैं regex नफरत है, तो सौभाग्य से वहाँ उनके बिना यह करने के लिए, बस स्ट्रिंग विभाजित करके एक तरीका है:
> s <- "DNS000001320_309.0/121.0_t0"
> paste(strsplit(s,"_")[[1]][1:2],collapse = "_")
[1] "DNS000001320_309.0/121.0"
हालांकि निश्चित रूप से यह मानता है कि वहाँ हमेशा कम से कम 2 में अंडरस्कोर हो जाएगा अपने स्ट्रिंग, इसलिए सावधान रहें यदि आप इसे सदिश करते हैं और ऐसा नहीं है।
सुंदर नहीं है, लेकिन इस चाल
mystr <- "DNS000001320_309.0/121.0_t0"
mytok <- paste(strsplit(mystr,"_")[[1]][1:2],collapse="_")
निम्न स्क्रिप्ट करना होगा:
s <- "DNS000001320_309.0/121.0_t0"
t <- gsub("^([^_]*_[^_]*)_.*$", "\\1", s)
t
प्रिंट होगा:
DNS000001320_309.0/121.0
regex का एक त्वरित विवरण:
^ # the start of the input
( # start group 1
[^_]* # zero or more chars other than `_`
_ # a literal `_`
[^_]* # zero or more chars other than `_`
) # end group 1
_ # a literal `_`
.* # consume the rest of the string
$ # the end of the input
जो साथ बदल दिया है:
\\1 # whatever is matched in group 1
और अगर वहाँ कम से कम 2 अंडरस्कोर हैं, स्ट्रिंग नहीं बदला है।
वाह, वास्तव में अच्छा, विस्तृत उत्तर (+1)। मुझे निश्चित रूप से मेरा समाधान बेहतर से पसंद है :) – daroczig
कोई गारंटी नहीं है कि तार हमेशा एक दूसरे होगा _ ? आप उन मामलों को कैसे संभालना चाहते हैं जहां 0 या 1 अंडरस्कोर हैं? – Brian
इसमें हमेशा 2 "_" एस होगा ... गारंटीकृत! स्ट्रिंग 'sep = "_" 'का उपयोग कर 3 तारों का' पेस्ट 'है। – James