2010-07-23 11 views
7

मैं एक CSV फ़ाइल से डेटा है कि एकल उद्धरण में संलग्न है, जैसे है:जावा Regex प्रारंभ/समाप्ति सिंगल कोट्स को दूर लेकिन अंदर जाने के लिए उद्धरण

'Company name' 
'Price: $43.50' 
'New York, New York' 

मैं कम से एकल उद्धरण को बदलने के लिए सक्षम होना चाहते हैं मूल्य के प्रारंभ/समाप्ति लेकिन डेटा में उद्धरण छोड़ देते हैं, जैसे:

'Joe's Diner' should become Joe's Diner 

मैं

updateString = theString.replace("^'", "").replace("'$", ""); 

कर सकते हैं, लेकिन मैं चाहता था पता है कि मैं इसे केवल एक प्रतिस्थापित करने के लिए जोड़ सकता हूं।

+0

आप असंतुलित उद्धरण अनुमति देना चाहते हैं * और * एक सेल के भीतर अल्पविराम से बचने के लिए उद्धरण का उपयोग करें? एक बार में दोनों करना संभव नहीं है। – finnw

+0

हां, आप उन्हें आसानी से जोड़ सकते हैं। @ योशिय्याह के जवाब पर एक और नज़र डालें, अब वह सही विधि का उपयोग कर रहा है। –

उत्तर

16

आप या ऑपरेटर का उपयोग कर सकते हैं।

updateString = theString.replaceAll("(^')|('$)",""); 

देखें कि यदि आप के लिए काम करता है :)

+0

मुझे इसे बदलने के लिए इसे बदलना था, लेकिन फिर यह काम किया। यदि आप अपना उत्तर अपडेट करते हैं, तो मैं इसे स्वीकार करूंगा – George

+0

मदद करने में खुशी हुई :) – Josiah

+0

मुझे इसके विपरीत की आवश्यकता है। मैं इस // * [@ text = 'some'Text'] को // * [@ text = 'some \' text '] में कनवर्ट करना चाहता हूं – vaibhavcool20

1
updateString = theString.replaceFirst("^'(.*)'$", "$1"); 

ध्यान दें कि प्रपत्र आप कोई क्योंकि replace शाब्दिक तार, नहीं regexes का उपयोग करता है काम नहीं करेगा की है।

यह कैप्चरिंग समूह (.*) का उपयोग करके काम करता है, जिसे प्रतिस्थापन टेक्स्ट में $1 के साथ संदर्भित किया जाता है। तुम भी कुछ ऐसा कर सकता है:

Pattern patt = Pattern.compile("^'(.*)'$"); // could be stored in a static final field. 
Matcher matcher = patt.matcher(theString); 
boolean matches = matcher.matches(); 
updateString = matcher.group(1); 

बेशक, अगर तुम वहाँ शुरुआत और अंत में एक ही उद्धरण सुनिश्चित हों, सरल समाधान है:

updateString = theString.substring(1, theString.length() - 1); 
संबंधित मुद्दे