मैं सी # में एक टेलनेट क्लाइंट लिख रहा हूं और मुझे जो विश्लेषण करना है वह हिस्सा एएनएसआई/वीटी 100 एस्केप अनुक्रम हैं, विशेष रूप से, केवल रंग और स्वरूपण के लिए उपयोग किए जाने वाले (विस्तृत here)।यह नियमित अभिव्यक्ति तेज़ी से क्यों है?
एक विधि मेरे पास एक सभी कोड को खोजने और उन्हें हटाने के लिए है, इसलिए यदि आवश्यक हो तो मैं किसी भी स्वरूपण के बिना पाठ प्रस्तुत कर सकते हैं:
public static string StripStringFormating(string formattedString)
{
if (rTest.IsMatch(formattedString))
return rTest.Replace(formattedString, string.Empty);
else
return formattedString;
}
मैं नियमित अभिव्यक्ति के लिए नया हूँ और मैं करने के लिए सुझाव दिया गया था इसका उपयोग करें:
static Regex rText = new Regex(@"\e\[[\d;]+m", RegexOptions.Compiled);
हालांकि, सर्वर पर किसी त्रुटि के कारण एस्केप कोड अपूर्ण होने पर यह विफल रहा। तो फिर इस सुझाव दिया गया था, लेकिन मेरे दोस्त ने चेतावनी दी है कि यह धीमी हो सकती है (यह एक भी एक और शर्त (z) है कि मैं बाद में देखने को मिल सकते मेल खाता है):
static Regex rTest =
new Regex(@"(\e(\[([\d;]*[mz]?))?)?", RegexOptions.Compiled);
यह न केवल काम किया, लेकिन करने के लिए तेजी से वास्तव में था और मेरे पाठ प्रतिपादन पर प्रभाव कम कर दिया। क्या कोई रेगेक्सपी नौसिखिया को समझा सकता है, क्यों? :)
यह अब के बारे में सोच रही थी, मतलब है कि, कोई मेल नहीं के साथ एक लाइन पर एक regexp चलाने का पहला एक जांच चल रूप में ही है देखें कि यह बिल्कुल मेल खाता है या नहीं। आपको एक ही परिणाम मिलते हैं! – Nidonocu