找到2个已知值之间的字符串

Ash*_*ley 62 .net c# regex

我需要能够在2个标签之间提取一个字符串,例如:"00002"来自" morenonxmldata<tag1>0002</tag1>morenonxmldata"

我正在使用C#和.NET 3.5.

Aar*_*ron 109

  Regex regex = new Regex("<tag1>(.*)</tag1>");
  var v = regex.Match("morenonxmldata<tag1>0002</tag1>morenonxmldata");
  string s = v.Groups[1].ToString();
Run Code Online (Sandbox Code Playgroud)

或者(如评论中所述)匹配最小子集:

  Regex regex = new Regex("<tag1>(.*?)</tag1>");
Run Code Online (Sandbox Code Playgroud)

Regexclass在System.Text.RegularExpressions命名空间中.

  • @Aaron:通过将`(.*)`改为`(.*?)`来使用非贪婪的匹配 - 这将防止@Kugel提到的错误匹配. (18认同)
  • 这很危险!在这个strig:"aa <tag1> bbb </ tag1> ccc <tag1> ddd </ tag1> eee"它将返回"bbb </ tag1> ccc <tag1> ddd" (9认同)
  • 当我这样做时,它返回 &lt;tag1&gt; 和 &lt;/tag1&gt; 以及之间的字符串?! (2认同)

Meh*_*ari 68

无需正则表达式的解决方案:

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);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果它们是相同标签的多个,可以做些什么来获得价值? (3认同)

Mar*_*ell 12

一个Regex用懒惰匹配和反向引用的方法:

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);
}
Run Code Online (Sandbox Code Playgroud)


Oze*_*esh 10

在两个已知值之间提取内容对于稍后也是有用的.那么为什么不为它创建一个扩展方法呢.这就是我的所作所为,简短而简单......

  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;
    }
Run Code Online (Sandbox Code Playgroud)


小智 5

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;
Run Code Online (Sandbox Code Playgroud)