আমার একটি স্ট্রিং আছে User name (sales)
এবং আমি বন্ধনীগুলির মধ্যে লেখাটি বের করতে চাই, আমি এটি কীভাবে করব?
আমি উপ-স্ট্রিং সন্দেহ করি কিন্তু বন্ধ বন্ধনী পর্যন্ত কীভাবে পড়তে হবে তা আমি কাজ করতে পারি না, পাঠ্যের দৈর্ঘ্য পৃথক হবে।
আমার একটি স্ট্রিং আছে User name (sales)
এবং আমি বন্ধনীগুলির মধ্যে লেখাটি বের করতে চাই, আমি এটি কীভাবে করব?
আমি উপ-স্ট্রিং সন্দেহ করি কিন্তু বন্ধ বন্ধনী পর্যন্ত কীভাবে পড়তে হবে তা আমি কাজ করতে পারি না, পাঠ্যের দৈর্ঘ্য পৃথক হবে।
উত্তর:
আপনি যদি নিয়মিত প্রকাশ থেকে দূরে থাকতে চান তবে আমি সবচেয়ে সহজ উপায়টি ভাবতে পারি:
string input = "User name (sales)";
string output = input.Split('(', ')')[1];
var input = "(fdw) User name (sales) safdsdf (again?)"; var output = input.Split('(', ')').Where((item, index) => index % 2 != 0).ToList();
sales
ইনপুট স্ট্রিং থেকে ধারণকারী )sales(
, (sales(
ইত্যাদি
এটি করার একটি খুব সহজ উপায় হ'ল নিয়মিত এক্সপ্রেশন ব্যবহার করে:
Regex.Match("User name (sales)", @"\(([^)]*)\)").Groups[1].Value
(খুব মজার) মন্তব্যের প্রতিক্রিয়া হিসাবে, এখানে কিছু ব্যাখ্যা সহ একই রেজেক্স:
\( # Escaped parenthesis, means "starts with a '(' character"
( # Parentheses in a regex mean "put (capture) the stuff
# in between into the Groups array"
[^)] # Any character that is not a ')' character
* # Zero or more occurrences of the aforementioned "non ')' char"
) # Close the capturing group
\) # "Ends with a ')' character"
var filterRegex = new Regex(Regex.Escape("(") + "([^()]*)" + Regex.Escape(")"));
ধরে নিচ্ছি যে আপনার কাছে কেবল একটি জুটি বন্ধনী রয়েছে।
string s = "User name (sales)";
int start = s.IndexOf("(") + 1;
int end = s.IndexOf(")", start);
string result = s.Substring(start, end - start);
int end = s.IndexOf(")", start);
। আমি একটি সম্পাদনা সারিবদ্ধ করেছি ...
এই ফাংশনটি ব্যবহার করুন:
public string GetSubstringByString(string a, string b, string c)
{
return c.Substring((c.IndexOf(a) + a.Length), (c.IndexOf(b) - c.IndexOf(a) - a.Length));
}
এবং এখানে ব্যবহার:
GetSubstringByString("(", ")", "User name (sales)")
এবং আউটপুট হবে:
sales
নিয়মিত ভাবগুলি এখানে সেরা সরঞ্জাম হতে পারে। আপনি যদি তাদের সাথে ফ্যামিলিলার না থেকে থাকেন তবে আমি আপনাকে এক্সপ্রেসো ইনস্টল করার পরামর্শ দিচ্ছি - একটি দুর্দান্ত ছোট্ট রেজেক্স সরঞ্জাম।
কিছুটা এইরকম:
Regex regex = new Regex("\\((?<TextInsideBrackets>\\w+)\\)");
string incomingValue = "Username (sales)";
string insideBrackets = null;
Match match = regex.Match(incomingValue);
if(match.Success)
{
insideBrackets = match.Groups["TextInsideBrackets"].Value;
}
string input = "User name (sales)";
string output = input.Substring(input.IndexOf('(') + 1, input.IndexOf(')') - input.IndexOf('(') - 1);
input = "User name (sales(1))
আপনি input.LastIndexOf(')')
অভ্যন্তরীণ প্রথম বন্ধনী থাকলে বা না থাকলে এটি কাজ করতে পারে।
using System;
using System.Text.RegularExpressions;
private IEnumerable<string> GetSubStrings(string input, string start, string end)
{
Regex r = new Regex(Regex.Escape(start) +`"(.*?)"` + Regex.Escape(end));
MatchCollection matches = r.Matches(input);
foreach (Match match in matches)
yield return match.Groups[1].Value;
}
int start = input.IndexOf("(") + 1;
int length = input.IndexOf(")") - start;
output = input.Substring(start, length);
regex
পদ্ধতি আমি মনে করি শ্রেয়, কিন্তু আপনি নম্র ব্যবহার করতে চেয়েছিলেন যদিsubstring
string input= "my name is (Jayne C)";
int start = input.IndexOf("(");
int stop = input.IndexOf(")");
string output = input.Substring(start+1, stop - start - 1);
অথবা
string input = "my name is (Jayne C)";
string output = input.Substring(input.IndexOf("(") +1, input.IndexOf(")")- input.IndexOf("(")- 1);
এখানে একটি সাধারণ উদ্দেশ্যে পঠনযোগ্য ফাংশন যা রেইগেক্স ব্যবহার করা এড়িয়ে চলে:
// Returns the text between 'start' and 'end'.
string ExtractBetween(string text, string start, string end)
{
int iStart = text.IndexOf(start);
iStart = (iStart == -1) ? 0 : iStart + start.Length;
int iEnd = text.LastIndexOf(end);
if(iEnd == -1)
{
iEnd = text.Length;
}
int len = iEnd - iStart;
return text.Substring(iStart, len);
}
এটিকে আপনার বিশেষ উদাহরণে কল করতে আপনি এটি করতে পারেন:
string result = ExtractBetween("User name (sales)", "(", ")");
আমি খুঁজে পেয়েছি যে নিয়মিত প্রকাশগুলি অত্যন্ত দরকারী তবে লেখা খুব কঠিন very সুতরাং, আমি কিছু গবেষণা করেছি এবং এই সরঞ্জামটি পেয়েছি যা তাদের লিখনকে এত সহজ করে তোলে।
এগুলি থেকে লজ্জা পাবেন না কারণ সিনট্যাক্সটি বের করা কঠিন। তারা এত শক্তিশালী হতে পারে।
আমি খুব অনুরূপ বাস্তবায়নের সমাধান সন্ধান করতে গিয়ে আমি এটি পেরিয়ে এসেছি।
আমার আসল কোড থেকে এখানে একটি স্নিপেট। প্রথম চর থেকে সূচকের সূচনা (সূচক 0)।
string separator = "\n"; //line terminator
string output;
string input= "HowAreYou?\nLets go there!";
output = input.Substring(0, input.IndexOf(separator));
এই কোডটি এখানে বেশিরভাগ সমাধানের চেয়ে দ্রুত (সমস্ত না থাকলে) স্ট্রিং এক্সটেনশন পদ্ধতি হিসাবে প্যাক করা হয়েছে , এটি পুনরাবৃত্ত নীড় সমর্থন করে না:
public static string GetNestedString(this string str, char start, char end)
{
int s = -1;
int i = -1;
while (++i < str.Length)
if (str[i] == start)
{
s = i;
break;
}
int e = -1;
while(++i < str.Length)
if (str[i] == end)
{
e = i;
break;
}
if (e > s)
return str.Substring(s + 1, e - s - 1);
return null;
}
এইটি কিছুটা দীর্ঘ এবং ধীর, তবে এটি পুনরাবৃত্ত নীড়গুলি আরও সুন্দরভাবে পরিচালনা করে:
public static string GetNestedString(this string str, char start, char end)
{
int s = -1;
int i = -1;
while (++i < str.Length)
if (str[i] == start)
{
s = i;
break;
}
int e = -1;
int depth = 0;
while (++i < str.Length)
if (str[i] == end)
{
e = i;
if (depth == 0)
break;
else
--depth;
}
else if (str[i] == start)
++depth;
if (e > s)
return str.Substring(s + 1, e - s - 1);
return null;
}