2013-07-22 5 views
12

मैं एक regex लिखने की ज़रूरत पता लगाने के लिए एक regex लेखन, कि एक शब्द की पहचान होता है कि एक दोहरा चरित्र अंत पर सेट। निम्नलिखित कोड खंड के अनुसार, दोहराना चरित्र सेट An है। मुझे एक रेगेक्स लिखने की ज़रूरत है ताकि इसे देखा और प्रदर्शित किया जा सके।दोहराने-वर्ण

निम्नलिखित कोड के अनुसार, \\w किसी भी शब्द वर्ण (अंक, अक्षर या विशेष वर्ण सहित) से मेल खाएगा। लेकिन मैं केवल अंग्रेजी पात्रों की पहचान करना चाहता हूं।

String stringToMatch = "IranAnAn"; 
Pattern p = Pattern.compile("(\\w)\\1+"); 
Matcher m = p.matcher(stringToMatch); 
if (m.find()) 
{ 
    System.out.println("Word contains duplicate characters " + m.group(1)); 
} 

अद्यतन

Word contains duplicate characters a 
Word contains duplicate characters a 
Word contains duplicate characters An 
+3

कितने पात्र "दोहराने" माना जाता है? क्या आप 'केले' को ध्वजांकित करना चाहते हैं (हालांकि यह एक वैध शब्द है) और 'मामा' (केवल दोहराना सेट)। 'चिड़ियाघर' के बारे में - एक वर्ण को दोहराना - या 'टॉमटॉम' (तीन वर्ण दोहराएं)। यदि आप "केवल अंग्रेज़ी पात्रों" का मिलान चाहते हैं, तो चरित्र के मिलान के लिए '[ए-ज़ा-जेड] 'का उपयोग करें। – Floris

उत्तर

8

आप संभव के रूप में अपने सेट में के रूप में कई पात्रों को पकड़ने के लिए चाहते हैं, इसलिए (\\w) के बजाय आप (\\w+) का उपयोग करना चाहिए और आप, अनुक्रम अंत में होना चाहता हूँ ताकि आप की जरूरत है $ जोड़ने के लिए (और मैं हटा दिया है + के बाद \\1 जो पुनरावृत्ति का पता लगाने के उपयोगी नहीं है: केवल एक पुनरावृत्ति की जरूरत है):

Pattern p = Pattern.compile("(\\w+)\\1$"); 

आपका प्रोग्राम तब अपेक्षित An आउटपुट करता है।

अंत में, यदि आप केवल ASCII वर्ण कैप्चर करना चाहते हैं, तो आप [a-zA-Z] बजाय \\w का उपयोग कर सकते हैं:

Pattern p = Pattern.compile("([a-zA-Z]+)\\1$"); 

और चरित्र में कम से कम 2 वर्णों का होना करने के लिए सेट अगर आप चाहते हैं:

Pattern p = Pattern.compile("([a-zA-Z]{2,})\\1$"); 
+0

नहीं, यह काम नहीं करता है। मैंने जो आउटपुट दिया है, मैंने जोड़ा है। यह 'ए' का भी पता लगाता है। मैं केवल लगातार पात्रों का पता लगाना चाहता हूं। –

+0

@sharonHwk मुझे यकीन नहीं है कि मैं समझता हूं। मैंने सोचा कि इनपुट 'ईरानएएनएएन' के साथ, आपको 'एन' ढूंढने की उम्मीद है - क्या यह तुम्हारा मतलब नहीं है? आपके अपडेट में, 'ए' को दोहराने वाले चरित्र के रूप में क्यों माना जाएगा? – assylias

+0

मैं केवल इसे दोहराना चाहता हूं जब यह दोहराए जाने वाले 'एन' का पता लगाता है। लेकिन यह तब होता है जब यह दोहराए जाने वाले 'ए' का पता लगाता है। –

1

यदि "केवल अंग्रेज़ी वर्ण" से आपका मतलब एजेड और एज़ है, तो फॉलो रेगेक्स काम करेगा:

".*([A-Za-z]{2,})\\1$" 
+0

से मेल नहीं खाता है, यह काम नहीं करता है। मैंने जो आउटपुट दिया है, मैंने जोड़ा है। यह 'ए' का भी पता लगाता है। मैं केवल लगातार पात्रों का पता लगाना चाहता हूं। –

+2

'यूनिकोड टेबल] में (http://unicode-table.com/en/#0060) 'ए' और' z' के बीच ''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' \ ''। '[ए-ज़ा-जेड] 'अधिक सटीक है। – Pshemo

+0

@Pshemo इनपुट के लिए धन्यवाद, मुझे उस समस्या से अवगत नहीं था! –

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

  • कोई संबंधित समस्या नहीं^_^