आप इस उद्देश्य के लिए नियमित अभिव्यक्तियों का उपयोग कर सकते हैं, लेकिन अतिरिक्त अपवाद से बचने के लिए अच्छा है जब इनपुट स्ट्रिंग नियमित अभिव्यक्ति के खिलाफ बेमेल हो।
रेगेक्स पैटर्न से बचने के अतिरिक्त सिरदर्द से बचने के लिए सबसे पहले - हम उस उद्देश्य के लिए फ़ंक्शन का उपयोग कर सकते हैं:
String reStrEnding = Regex.Escape("-");
मुझे पता है कि यह कुछ भी नहीं करता है - जैसा कि "-" के रूप में ही है Regex.Escape("=") == "=", लेकिन यह उदाहरण के लिए फर्क पड़ेगा अगर चरित्र है @"\"।
फिर हमें स्ट्रिंग के भीख मांगने से लेकर स्ट्रिंग समाप्त होने तक मेल खाना चाहिए, या वैकल्पिक रूप से यदि समाप्ति नहीं मिली है - तो कुछ भी मैच न करें। (खाली स्ट्रिंग)
Regex re = new Regex("^(.*?)" + reStrEnding);
यदि आपका आवेदन प्रदर्शन महत्वपूर्ण है - तो नए रेगेक्स के लिए अलग लाइन, यदि नहीं - आपके पास एक लाइन में सब कुछ हो सकता है।
और अंत में स्ट्रिंग और एक्स्ट्रेक्ट मैचेड पैटर्न के खिलाफ मैच करें:
String matched = re.Match(str).Groups[1].ToString();
और उसके बाद आप या तो अलग फ़ंक्शन लिख सकते हैं, जैसे कि यह एक अन्य उत्तर में किया गया था, या इनलाइन लैम्ब्डा फ़ंक्शन लिख सकता है। मैंने अब दोनों नोटेशन का उपयोग करते हुए लिखा है - इनलाइन लंबो फ़ंक्शन (डिफ़ॉल्ट पैरामीटर की अनुमति नहीं देता है) या अलग फ़ंक्शन कॉल।
using System;
using System.Text.RegularExpressions;
static class Helper
{
public static string GetUntilOrEmpty(this string text, string stopAt = "-")
{
return new Regex("^(.*?)" + Regex.Escape(stopAt)).Match(text).Groups[1].Value;
}
}
class Program
{
static void Main(string[] args)
{
Regex re = new Regex("^(.*?)-");
Func<String, String> untilSlash = (s) => { return re.Match(s).Groups[1].ToString(); };
Console.WriteLine(untilSlash("223232-1.jpg"));
Console.WriteLine(untilSlash("443-2.jpg"));
Console.WriteLine(untilSlash("34443553-5.jpg"));
Console.WriteLine(untilSlash("noEnding(will result in empty string)"));
Console.WriteLine(untilSlash(""));
// Throws exception: Console.WriteLine(untilSlash(null));
Console.WriteLine("443-2.jpg".GetUntilOrEmpty());
}
}
Btw - रेगेक्स पैटर्न को बदलने के लिए या तो पैटर्न "^(.*?)(-|$)"तक लेने की अनुमति देगा "-"या यदि पैटर्न नहीं मिला - स्ट्रिंग के अंत तक सब कुछ उठाएं।