【问题标题】:How can I extract a string between <strong> tags usings C#?如何使用 C# 在 <strong> 标签之间提取字符串?
【发布时间】:2023-03-25 17:14:01
【问题描述】:

假设我有一个字符串,如下所示:

"Unneeded text <strong>Needed Text</strong> More unneeded text"

如何只提取“Needed Text”?我猜 Regex 可能是最简单的方法,但 Regex 在我看来仍然像象形文字。

【问题讨论】:

标签: c# regex


【解决方案1】:
Regex regex = new Regex("<strong>(.*)</strong>");
  var v = regex.Match("Unneeded text <strong>Needed Text</strong> More unneeded text");
  string s = v.Groups[1].ToString();

【讨论】:

  • 请注意,给定字符串"Unneeded text &lt;strong&gt;Needed text&lt;/strong&gt; Less useful &lt;strong&gt;More useful&lt;/strong&gt;",它也会捕获Less useful。我建议改为(.*?)
  • 澄清一下,“?” after .* 将使其“惰性”,这意味着它会在匹配下一个时立即停止。
  • 我给了@Anna.P 支票,因为她在上面的评论中提供了我需要的东西:stackoverflow.com/questions/1717611/…,她还给出了与正则表达式有关的可靠答案。谢谢,安娜.P
【解决方案2】:

你不需要正则表达式。

您可以使用String.SubStringString.Split 之类的方法;

string s = "Unneeded text <strong>Needed Text</strong> More unneeded text";
Console.WriteLine(s.Substring(s.IndexOf("<strong>") + "<strong>".Length, s.IndexOf("</strong>") - s.IndexOf("<strong>") - "<strong>".Length));

输出将是;

Needed Text

这里是DEMO

【讨论】:

    【解决方案3】:

    【讨论】:

    • 我对 HTML Agility Pack 很熟悉,但是这种方法只会在应用程序的一个地方使用。我想避免太大。
    • 然后按照 Soner 的建议使用 Substring,除了我会将硬编码的 8 个值替换为 "".Length(显然计算一次)以使代码更具可读性。
    • @JonEdwards 好吧,如果你可以在这个字符串中拥有的 HTML 代码几乎可以是任何有效的 HTML 代码,那么真的没有办法绕过它。除非您可以确定您只处理有限的 HTML 子集,该子集不包含任何完全搞乱基于正则表达式的解决方案的模式,否则您将无法确定您的解决方案适用于所有输入。
    【解决方案4】:

    使用HTMLAgilityPack 并避免让自己头疼。应该这样做:

    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml("html...");
    
    var innerText = doc.DocumentNode.Descendants("strong").Select(x => x.InnerText).SingleOrDefault(); 
    

    【讨论】:

      【解决方案5】:

      以你的例子为例,一个简单的Split 就可以做到,例如

      var innerText = text.Split('>')[1].Split('<')[0];
      

      【讨论】:

      • 有人需要它用于最小的场景。这适用于
      • ElementValue
      【解决方案6】:

      使用一个简单的正则表达式怎么样:

      (?<=<strong>).+?(?=<)
      

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签