2009-07-16 13 views
24

मैं एक स्ट्रिंग है:मैं रेगेक्स का उपयोग करके ब्रांड्स में स्ट्रिंग को कैसे बदल सकता हूं?

HLN (Formerly Headline News) 

मैं कोष्ठक और कोष्ठक खुद को अंदर सब कुछ दूर करने के लिए, केवल छोड़ने हैं:

HLN 

मैं एक regex के साथ ऐसा करने की कोशिश की है, लेकिन मेरे कठिनाई यह पैटर्न के साथ है:

"(.+?)" 

जब मैं इसका इस्तेमाल, यह मुझे हमेशा एक PatternSyntaxException देता है। मैं अपने रेगेक्स को कैसे ठीक कर सकता हूं?

उत्तर

44

क्योंकि ब्रांड्स रीजिक्स में विशेष वर्ण हैं जिन्हें आपको उनसे मिलान करने के लिए उनसे बचने की आवश्यकता है।

उदाहरण के लिए:

"\\(.+?\\)" 
+3

वह चाहते हो सकता है +? अगर कई पैरेंटिज्ड टुकड़े हो सकते हैं। – glmxndr

+2

वूप्स, वह। – glmxndr

+0

हाँ, वह। मैंने डाला "?" बस कई parenthized मामले में। @jjnguy: व्याख्या के लिए धन्यवाद। यह काम करता हैं! – Lily

8

आप निम्न नियमित अभिव्यक्ति इस्तेमाल कर सकते हैं कोष्ठक को खोजने के लिए:

\([^)]*\) 

एक बाएं कोष्ठक पर \( मैचों [^)]* के अलावा अन्य पात्रों के किसी भी संख्या से मेल खाता है दाएं कोष्ठक पर दाएं कोष्ठक, और \) मैचों।

आप एक जावा स्ट्रिंग में यह शामिल कर रहे हैं, तो आप निम्नलिखित की तरह \ वर्ण से बचें चाहिए:

String regex = "\\([^)]*\\)"; 
3
String foo = "bar (baz)"; 
String boz = foo.replaceAll("\\(.+\\)", ""); // or replaceFirst 

boz अब "bar "

11
String foo = "(x)()foo(x)()"; 
String cleanFoo = foo.replaceAll("\\([^\\(]*\\)", ""); 
// cleanFoo value will be "foo" 

है ऊपर खाली निकालता है और स्ट्रिंग के दोनों तरफ से खाली खाली कोष्ठक।

सादा regex:

\([^\(]*\)

आप यहाँ परीक्षण कर सकते हैं:। http://www.regexplanet.com/simple/index.html

मेरे कोड पिछले जवाब पर आधारित है

संबंधित मुद्दे

 संबंधित मुद्दे