कॉमेक्स ',' या सेमी-कोलोन 'को छोड़कर हर कैरेक्टर से क्या मेल खाता है?'


344

क्या एक रेगीक्स को परिभाषित करना संभव है जो कि किसी निश्चित परिभाषित चरित्र या वर्णों के सेट को छोड़कर हर चरित्र से मेल खाएगा?

मूल रूप से, मैं या तो अल्पविराम (,) या अर्ध-बृहदान्त्र (;) द्वारा एक स्ट्रिंग को विभाजित करना चाहता था। इसलिए मैं इसे रेगेक्स के साथ करने की सोच रहा था जो कि कॉमा या सेमी-कोलोन का सामना करने तक सब कुछ मैच करेगा।

जवाबों:


473
[^,;]+         

आपके द्वारा उपयोग किए जा रहे रेगेक्स कार्यान्वयन को आपने निर्दिष्ट नहीं किया है। उनमें से अधिकांश में एक Splitविधि है जो उनके द्वारा सीमांकित और विभाजित होती है। आप "सामान्य" (बिना ^) वर्ण वर्ग वाले उस का उपयोग करना चाह सकते हैं :

[,;]+

10
और यह प्रश्न निर्दिष्ट नहीं करता है कि क्या आसन्न विभाजकों की अनुमति है, इसलिए अनुगामी '+' थोड़ा संदिग्ध है।
जोनाथन लेफ्लर

केवल अर्धविराम के लिए एक त्रुटि हो रही है
जसविंदर

मुझे इसी तरह की आवश्यकता थी जहां मैं अर्धविराम और अल्पविराम से बचना चाहता हूं मैंने बहुत कोशिश की लेकिन नीचे कोई सफलता नहीं है रेगेक्स मैं कॉन्स्ट रेगेक्सडोमेन = / ^ का उपयोग कर रहा हूं? (?: [A-Za-z0 -9] ?:? [एक-zA-Z0-9 -] {0,61} [ए-zA-Z0-9]) \) + [एक-zA-Z0-9] [ए-zA-Z0-9 -]?। { 0,61} [ए-zA-Z0-9] / जी; वैसे यह मान्य है अगर मैं उपयोग करता हूं, और; बीच-बीच में लेकिन उल्टी करने के लिए अंत में विफल रहता है।
हैरी

86

चरित्र वर्गों का उपयोग करें। कैरेट से शुरू होने वाला एक चरित्र वर्ग, क्लास में कुछ भी मैच नहीं करेगा।

[^,;]


मुझे इसी तरह की आवश्यकता थी जहां मैं अर्धविराम और अल्पविराम से बचना चाहता हूं मैंने बहुत कोशिश की लेकिन नीचे कोई सफलता नहीं है रेगेक्स मैं कॉन्स्ट रेगेक्सडोमेन = / ^ का उपयोग कर रहा हूं? (?: [A-Za-z0 -9] ?:? [एक-zA-Z0-9 -] {0,61} [ए-zA-Z0-9]) \) + [एक-zA-Z0-9] [ए-zA-Z0-9 -]?। { 0,61} [ए-zA-Z0-9] / जी; वैसे यह मान्य है अगर मैं उपयोग करता हूं, और; बीच-बीच में लेकिन उल्टी करने के लिए अंत में विफल रहता है।
हैरी


2

इसे इस्तेमाल करो:

([^,;]*[,;])*

5
क्षेत्र विभाजक के बजाय, क्षेत्र परिसीमाक के रूप में अल्पविराम या अर्ध-उपनिवेश की आवश्यकता होती है। एक 'लाइन' (या अन्य स्कैन की गई रिकॉर्ड संरचना) के अंत में अंतर मायने रखता है; आमतौर पर, आप अंतिम फ़ील्ड के बाद अल्पविराम या अर्ध-बृहदान्त्र पर जोर नहीं देना चाहते हैं। यदि आपका रेगेक्स इंजन काफी शक्तिशाली है, तो आप ' (?:([^,;]*)(?:[^,;]|$))' (गैर-कैप्चरिंग कोष्ठक के साथ पीसीआरई) का उपयोग कर सकते हैं । क्षेत्र, या रिकॉर्ड के अंत के बाद अल्पविराम या अर्ध-बृहदान्त्र के विकल्प, चीजों को बेहतर बनाते हैं। यह भी विचार करें कि क्या खाली खेतों की अनुमति है।
जोनाथन लेफ़लर

1
अंत में, आपको इस बारे में चिंता करना होगा कि वास्तव में कैप्चर द्वारा क्या लौटाया गया है - क्या आप वास्तव में विभाजकों को शामिल करना चाहते हैं, और यदि एक रेखा पर 10 फ़ील्ड हैं, तो उनमें से कितने कैप्चर अंकन द्वारा वापस किए जाते हैं।
जोनाथन लेफ्लर

1
आप उस सब के बारे में सही हैं, लेकिन जिस कारण से मैंने अपने उत्तर में उन बातों को कंसर्ट नहीं किया, वह यह नहीं है कि प्रश्नकर्ता से पूछें जाने वाली भाषा / लाइब्रेरी क्या है। वह "GREP" का उपयोग कर सकता है। वैसे भी, मैं आपके लिए उन टिप्पणियों को जोड़ने की सराहना करता हूं जो उसके लिए स्पष्ट हैं। : डी
नवामन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.