मेरे पास एक स्ट्रिंग है 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)", "(", ")");
मुझे लग रहा है कि नियमित अभिव्यक्ति बेहद उपयोगी है लेकिन लिखना बहुत मुश्किल है। इसलिए, मैंने कुछ शोध किए और इस उपकरण को पाया जो उन्हें लिखना इतना आसान बनाता है।
उनसे दूर न करें क्योंकि वाक्य रचना का पता लगाना मुश्किल है। वे इतने शक्तिशाली हो सकते हैं।
मैं इस पार आया था जब मैं एक बहुत ही इसी तरह के कार्यान्वयन के लिए एक समाधान के लिए देख रहा था।
यहाँ मेरे वास्तविक कोड से एक स्निपेट है। पहले चार (इंडेक्स 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;
}