【问题标题】:Get specific Value as String c#获取特定值作为字符串 c#
【发布时间】:2014-12-16 09:03:25
【问题描述】:

简单:

我知道这是MessageBody xItem.Body

"<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n</head>\r\n<body>\r\nDies ist test nummer 3\r\n</body>\r\n</html>\r\n"

而我只需要保存&lt;body&gt;\r\n \r\n&lt;/body&gt;之间的内容就好了:

m_Description = xItem.Body;

什么是最简单的!方式?

【问题讨论】:

  • 你试过用Html Agility Pack吗?它是最著名的 HTML 解析器。
  • 肯定使用外部解析器,如上所述。使用regex解析html一般是considered bad practice
  • 会试试的,谢谢,但我正在寻找没有扩展的东西或者没有其他方法吗?
  • 您可以对字符串使用简单的IndexOfSubstring 操作。但是,您也可以使用勺子砍木头。这不一定是最好的方法。
  • 确实如此。从合适的工具开始,然后当需求在 2 周内发生变化时,这将是一个简单的变化,而不是大的重写。

标签: c# regex string substring string.format


【解决方案1】:

感谢您对外部工具的反馈。我现在将使用它,但是对于这个问题我编写了这个函数:

    private string ExtractBetweenBodyTags(string str1)
    {

        if ( ! string.IsNullOrEmpty(str1))
        {
            int p1 = str1.IndexOf("<body>\r\n");
                if (p1 >-1)
                {
                    string str2 = str1.Substring(p1 + "<body>\r\n".Length);
                    int p2= str2.IndexOf("\r\n</body>");
                    if (p2 > -1)
                    {
                        str2 = str2.Substring(0,p2-1 );
                        return str2;
                    }
                }
        }
        return "";
    }

并且使用它没有任何问题。

我认为我们可以关闭它:)

【讨论】:

  • 如果您解决了自己的问题,您可以将其标记为已接受的解决方案。鼓励这样做。
  • 可能想使用LastIndexOf 来查找&lt;/body&gt;,以防万一它可能会在其他地方找到(可能在cdata 中?),以及因为它更有可能在字符串的末尾,所以性能可能更高
  • @JamesThorpe 是的,太好了,这是我需要的最后一个输入,我可以使用 LastIndexOf 和 @Kyle Muir 我可以在 2 天内接受它。但我会的。
【解决方案2】:

使用正则表达式:

 Regex regex = new Regex(@"(?<=<body>).*?(?=</body>)", RegexOptions.Singleline);
 string body = regex.Match(source).ToString();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多