2012-07-30 11 views
5

मैं एक स्ट्रिंग को साफ़ करना चाहता हूं जिसमें उद्धरण उद्धरण चिह्न शामिल हैं। मैं बच निकलने वाले उद्धरण को अंत में और स्ट्रिंग की शुरुआत के अंक को हटाना चाहता हूं लेकिन स्ट्रिंग के भीतर सभी क्यूउटेशन अंक बरकरार रखता हूं। मैं जो आया उसके साथ निम्नलिखित है।स्ट्रिंग से उद्धरण चिह्नों को शुरुआत और अंत में केवल तभी हटाएं जब दोनों मौजूद हों

library(stringr) 
s1 <- "\"He said:\"Hello\" - some word\"" 
str_replace_all(s1, "(^\\\")|(\\\"$)", "") 

> [1] "He said:\"Hello\" - some word" 

क्या मैं के साथ अब संघर्ष कर रहा हूँ कि मैं केवल उद्धरण चिह्नों को निकालना चाहते हैं और तभी शुरुआत में और अंत में से एक है। अन्यथा नहीं। निम्नलिखित अभिव्यक्ति झूठी रूप से अग्रणी को हटा देती है।

s2 <- "\"Hello!\" he said" 
str_replace_all(s2, "(^\\\")|(\\\"$)", "") 

> [1] "Hello!\" he said" 

यहाँ मेरी regex का संकेत देना चाहिए कि मैं केवल उन्हें मामले में दूर करने के लिए पूरी स्ट्रिंग बच गए उद्धरण चिह्नों में लपेटा जाता है चाहता हूँ। मैं उसे कैसे कर सकता हूँ?

उत्तर

7

निम्नलिखित regex अपने उदाहरण पर काम करने लगता है:

s <- c("\"He said:\"Hello\" - some word\"", "\"Hello!\" he said") 

regex बैक संदर्भ (\\1) का उपयोग करता प्रमुख बोली ^\" और अनुगामी बोली \"$ अंदर केवल स्ट्रिंग वापस जाने के लिए:

r <- gsub("^\"(.*)\"$", "\\1", s) 

परिणामस्वरूप:

cat(r, sep="\n") 
He said:"Hello" - some word 
"Hello!" he said 
संबंधित मुद्दे