2015-12-29 4 views
5

मैंने हाल ही में रेगेक्स के बारे में बहुत सारी रोचक सामग्री पढ़ी है। विशेष रूप से creating your own regex boundariesमैं दो पूंजी अक्षरों को एकसाथ कैसे मिल सकता हूं, जो कि रेगेक्स का उपयोग करके विशेष वर्णों से पहले नहीं हैं?

एक चीज जो मुझे नहीं लगता कि मैंने देखा है (मैं 100% हूं, लेकिन मैंने कोई उदाहरण नहीं देखा है) यह है कि अगर यह पहले से हो तो रेगेक्स मैच को बाहर कैसे किया जाए एक 'विशेष चरित्र' द्वारा, जैसे &! % $ #। उदाहरण के लिए:

अगर मैं regex का उपयोग (नोट: यह सी # से है)

([A-Z]{2,}\\b) 

यह कैपिटल अक्षर है कि दो या लंबाई में अधिक कर रहे हैं की भरपाई कर देंगे, और यह सुनिश्चित करना \b सीमा का उपयोग दो पूंजी पत्र किसी अन्य पत्र के साथ शुरू या समाप्त नहीं होते हैं। लेकिन यहाँ जहां मुझे यकीन है कि यह कैसे व्यवहार होता नहीं कर रहा हूँ है:

ए.ए. मैच

SAB -नहीं मैच

एसी -नहीं मैच

- मैच

एएफ! -Match

मैं जानना चाहता हूं कि केवल दो या दो से अधिक पूंजी अक्षरों का चयन कैसे करें जो कम केस अक्षर/संख्या/प्रतीक से पहले नहीं हैं, या उसके बाद कम केस अक्षर/संख्या/विशेष वर्ण हैं।

मैंने लोगों को रिक्त स्थान का उपयोग देखा है, इसलिए सुनिश्चित करें कि स्ट्रिंग एक स्थान के साथ शुरू होती है या समाप्त होती है, लेकिन यह लाइन के आरंभ या अंत में काम नहीं करती है।

तो, उत्पादन मैं उदाहरण से के लिए लगेगा ऊपर होगा:

ए.ए. मैच

SAB -नहीं मैच

एसी -नहीं मैच

! एडी - कोई मिलान

एएफ! - कोई मिलान

किसी भी मदद की सराहना की जाती है।

+0

लगता है जैसे आप 2 ऊपरी मामले के दोनों किनारों पर एक शब्द सीमा चाहते हैं? –

+0

आपका किस प्रकार का "प्रतीक" है? '\ P {S}'? –

+0

प्रतीक शायद गलत शब्द था। मुझे विशेष पात्रों के बारे में कहना चाहिए था जैसा कि मैंने पहले प्रश्न में किया था "! @ # $%^& *()" – trueCamelType

उत्तर

2

तुम सिर्फ एक lookbehind और एक अग्रदर्शी उपयोग करने की आवश्यकता:

(?<![a-z\[email protected]#$%^&*()])[A-Z]{2,}(?![a-z\[email protected]#$%^&*()]) 

देखें regex demo

(?<![a-z\[email protected]#$%^&*()]) lookbehind सुनिश्चित करती है वहाँ कोई लोअरकेस है पत्र ([a-z]), अंक (\d), या आपके द्वारा परिभाषित विशेष वर्ण। यदि कोई है, तो मैच विफल हो गया है, कुछ भी वापस नहीं किया गया है।

(?![a-z\[email protected]#$%^&*()]) लुकहेड भी एक मैच में विफल रहता है यदि ऑलकैप्स अक्षरों के बाद समान वर्ण पाए जाते हैं।

Lookahead and Lookbehind Zero-Length Assertions here पर और जानकारी देखें।

+1

धन्यवाद बहुत, यह एक महान स्पष्टीकरण था। मैं बिल्कुल भी उपयोग नहीं कर रहा था, और अब मैं और अधिक दिखने का पता लगा सकता हूं। धन्यवाद! – trueCamelType

+1

'\ d' के अलावा, सी # में आप अंक मिलान करने के लिए' \ p {N} 'का उपयोग कर सकते हैं, लेकिन' \ d' छोटा है। केवल एक पक्ष नोट: '\ d' सभी यूनिकोड अंकों (अरबी, हिब्रू, हिंदी, आदि) से भी मेल खाएगा ताकि आप अभी भी केवल ASCII वाले लोगों को सीमित कर सकें, जिनमें '[0-9]' है। –

1

मुझे लगता है कि आपके पास लोअर केस लेटर और किसी भी प्रतीक को अस्वीकार करने के साथ आपके पास मौजूद पैटर्न से पहले पर्याप्त है। मेरा उदाहरण केवल ! को छोड़ता है, लेकिन आप उचित सूची में जोड़ सकते हैं। ब्रैकेट के अंदर ^ इनके अंदर क्या है, यह अस्वीकार करता है।तो, उदाहरण के लिए, आप पैटर्न

/[^a-z!][A-Z]{2,}[^a-z!]/g 
शामिल कर सकते हैं
संबंधित मुद्दे

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