0002...">

Find the line between two known values

I need to be able to extract a string between two tags, for example: "00002" from " morenonxmldata<tag1>0002</tag1>morenonxmldata "

I am using C # and .NET 3.5.

+62
c # regex
Nov 11 '09 at 19:50
source share
9 answers

A RegEx solution:

 string ExtractString(string s, string tag) { // You should check for errors in real-world code, omitted for brevity var startTag = "<" + tag + ">"; int startIndex = s.IndexOf(startTag) + startTag.Length; int endIndex = s.IndexOf("</" + tag + ">", startIndex); return s.Substring(startIndex, endIndex - startIndex); } 
+66
Nov 11 '09 at 19:59
source share
  Regex regex = new Regex("<tag1>(.*)</tag1>"); var v = regex.Match("morenonxmldata<tag1>0002</tag1>morenonxmldata"); string s = v.Groups[1].ToString(); 

Or (as indicated in the comments) to match the minimum subset:

  Regex regex = new Regex("<tag1>(.*?)</tag1>"); 

Regex class is in the System.Text.RegularExpressions namespace.

+109
Nov 11 '09 at 19:58
source share

A Regex using lazy matching and backlink:

 foreach (Match match in Regex.Matches( "morenonxmldata<tag1>0002</tag1>morenonxmldata<tag2>abc</tag2>asd", @"<([^>]+)>(.*?)</\1>")) { Console.WriteLine("{0}={1}", match.Groups[1].Value, match.Groups[2].Value); } 
+12
Nov 11 '09 at 20:07
source share

Retrieving content between two known values ​​can be useful for later use. Therefore, why not create an extension method for it. Here is what I do, short and simple ...

  public static string GetBetween(this string content, string startString, string endString) { int Start=0, End=0; if (content.Contains(startString) && content.Contains(endString)) { Start = content.IndexOf(startString, 0) + startString.Length; End = content.IndexOf(endString, Start); return content.Substring(Start, End - Start); } else return string.Empty; } 
+10
Dec 20 '16 at 12:21
source share
 string input = "Exemple of value between two string FirstString text I want to keep SecondString end of my string"; var match = Regex.Match(input, @"FirstString (.+?) SecondString ").Groups[1].Value; 
+5
Jun 06 '17 at 20:23
source share

For future reference, I found this code snippet at http://www.mycsharpcorner.com/Post.aspx?postID=15 If you need to look for different "tags", it works very well.

  public static string[] GetStringInBetween(string strBegin, string strEnd, string strSource, bool includeBegin, bool includeEnd) { string[] result ={ "", "" }; int iIndexOfBegin = strSource.IndexOf(strBegin); if (iIndexOfBegin != -1) { // include the Begin string if desired if (includeBegin) iIndexOfBegin -= strBegin.Length; strSource = strSource.Substring(iIndexOfBegin + strBegin.Length); int iEnd = strSource.IndexOf(strEnd); if (iEnd != -1) { // include the End string if desired if (includeEnd) iEnd += strEnd.Length; result[0] = strSource.Substring(0, iEnd); // advance beyond this segment if (iEnd + strEnd.Length < strSource.Length) result[1] = strSource.Substring(iEnd + strEnd.Length); } } else // stay where we are result[1] = strSource; return result; } 
+2
Feb 24 '12 at 12:45
source share

I share the data before and after.

  using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Text.RegularExpressions; namespace testApp { class Program { static void Main(string[] args) { string tempString = "morenonxmldata<tag1>0002</tag1>morenonxmldata"; tempString = Regex.Replace(tempString, "[\\s\\S]*<tag1>", "");//removes all leading data tempString = Regex.Replace(tempString, "</tag1>[\\s\\S]*", "");//removes all trailing data Console.WriteLine(tempString); Console.ReadLine(); } } } 
+1
Jun 07 '16 at 18:12
source share

Without RegEx with some mandatory value checking

  public static string ExtractString(string soapMessage, string tag) { if (string.IsNullOrEmpty(soapMessage)) return soapMessage; var startTag = "<" + tag + ">"; int startIndex = soapMessage.IndexOf(startTag); startIndex = startIndex == -1 ? 0 : startIndex + startTag.Length; int endIndex = soapMessage.IndexOf("</" + tag + ">", startIndex); endIndex = endIndex > soapMessage.Length || endIndex == -1 ? soapMessage.Length : endIndex; return soapMessage.Substring(startIndex, endIndex - startIndex); } 
0
Aug 23 '16 at 8:19
source share
  public string between2finer(string line, string delimiterFirst, string delimiterLast) { string[] splitterFirst = new string[] { delimiterFirst }; string[] splitterLast = new string[] { delimiterLast }; string[] splitRes; string buildBuffer; splitRes = line.Split(splitterFirst, 100000, System.StringSplitOptions.RemoveEmptyEntries); buildBuffer = splitRes[1]; splitRes = buildBuffer.Split(splitterLast, 100000, System.StringSplitOptions.RemoveEmptyEntries); return splitRes[0]; } private void button1_Click(object sender, EventArgs e) { string manyLines = "Received: from exim by isp2.ihc.ru with local (Exim 4.77) \nX-Failed-Recipients: rmnokixm@gmail.com\nFrom: Mail Delivery System <Mailer-Daemon@isp2.ihc.ru>"; MessageBox.Show(between2finer(manyLines, "X-Failed-Recipients: ", "\n")); } 
-9
Jun 24 '13 at 18:29
source share



All Articles