2009-07-30 11 views
41

C# में, मैं इन शब्दों के किसी भी मैच के लिए रेगुलर एक्सप्रेशन का उपयोग करना चाहते हैं। मुझे लगा कि यह regex कि क्या करना होगा: भले ही मैं केवल सम्पूर्ण शब्द pants चाहतेRegex.Match पूरे शब्द

if (Regex.Match(content, keywords + "\\s+", 
    RegexOptions.Singleline | RegexOptions.IgnoreCase).Success) 
{ 
    //matched 
} 

लेकिन यह participants जैसे शब्दों के लिए सच देता है,।

मैं केवल उन शाब्दिक शब्दों से कैसे मेल करूं?

उत्तर

72

आप अपने रेगुलर एक्सप्रेशन से करने के लिए शब्द सीमांकक जोड़ना चाहिए:

\b(shoes|shirt|pants)\b 

कोड में:

Regex.Match(content, @"\b(shoes|shirt|pants)\b"); 
1

\ b metasequence का उपयोग कर इस पर एक शब्द सीमा डाल दिया।

(?=(\W|^))(shoes|shirt|pants)(?!(\W|$)) 

दूसरों के रूप में सुझाव दिया, मुझे लगता है कि \ b काम करेगा:

+3

यह रेगेक्स अभिव्यक्ति के बावजूद उत्तर प्रदान करता है। – escist

4

आप दोनों तरफ एक शून्य चौड़ाई दावा है कि पहले या शब्द के बाद वर्ण शब्द का हिस्सा नहीं हैं की जरूरत है (? = (\ W | ^)) और (?! (\ W | $)) जब भी इनपुट स्ट्रिंग की शुरुआत या अंत में है, लेकिन मुझे यकीन नहीं है।

+0

आपका पैटर्न "\ b" से बेहतर है, क्योंकि उत्तरार्द्ध कीवर्ड नहीं लेगा, उदाहरण के लिए, कॉमा ("कीवर्ड,") के साथ समाप्त होता है, जबकि इसकी अपेक्षा की जाती है। साथ ही, सही पैटर्न है: (? <= \ डब्ल्यू | ^) (कीवर्ड) (? = \ डब्ल्यू | $) –

13

शब्द सीमाओं पर

Regex.Match(content, @"\b" + keywords + @"\b", RegexOptions.Singleline | RegexOptions.IgnoreCase) 

\b मैचों की कोशिश करो। अधिक जानकारी के लिए here देखें।

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