আপনি এই উদ্দেশ্যে নিয়মিত এক্সপ্রেশন ব্যবহার করতে পারেন, তবে নিয়মিত অভিব্যক্তির বিপরীতে ইনপুট স্ট্রিং মিল না থাকলে অতিরিক্ত ব্যতিক্রম এড়ানো ভাল।
রেজেক্স প্যাটার্নে পালানোর অতিরিক্ত মাথাব্যথা এড়াতে প্রথমে - আমরা কেবল সেই উদ্দেশ্যে ফাংশনটি ব্যবহার করতে পারি:
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());
}
}
বিটিডব্লিউ - রেজেক্স প্যাটার্ন পরিবর্তন করে প্যাটার্ন "^(.*?)(-|$)"না হওয়া অবধি "-"বা প্যাটার্নটি খুঁজে পাওয়া না গেলে - স্ট্রিংয়ের শেষ অবধি সবকিছু বাছাই করা।