Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用正则表达式C从HTML标记中删除样式#_C#_Html - Fatal编程技术网

C# 使用正则表达式C从HTML标记中删除样式#

C# 使用正则表达式C从HTML标记中删除样式#,c#,html,C#,Html,我想使用C#从HTML标记中删除样式。它应该只返回HTML简单标记。 例如。 如果字符串=Hello 然后它应该返回String=Hello 与所有HTML标记一样,,等 请帮我解决这个问题。首先,正如其他人所建议的,使用适当的HTML解析器的方法是可行的。要么使用,要么使用 如果您真的想要一个正则表达式解决方案,这里是: 替换此模式:(正如其他人所说,您可以使用HTML Agility pack,它有一个很好的工具:它向您显示您正在做什么 除此之外,它是正则表达式,通常不建议在HTML中使用

我想使用C#从HTML标记中删除样式。它应该只返回HTML简单标记。

例如。 如果字符串=

Hello

然后它应该返回
String=Hello



与所有HTML标记一样,



请帮我解决这个问题。

首先,正如其他人所建议的,使用适当的HTML解析器的方法是可行的。要么使用,要么使用

如果您真的想要一个正则表达式解决方案,这里是:


替换此模式:
(正如其他人所说,您可以使用HTML Agility pack,它有一个很好的工具:它向您显示您正在做什么

除此之外,它是正则表达式,通常不建议在HTML中使用正则表达式,也不建议在所有字符上使用循环在代码上运行。如果它以
。这应该考虑到大多数基本情况,但您必须对其进行测试

这里有一个小片段可以做到这一点:

void Main()
{
    // your input
    String input = @"<p style=""margin: 15px 0px; padding: 0px; border: 0px; outline: 0px;"">Hello</p>";
    // temp variables
    StringBuilder sb = new StringBuilder();
    bool inside = false;
    bool delete = false;
    // analyze string
    for (int i = 0; i < input.Length; i++)
    {
        // Special case, start bracket
        if (input[i].Equals('<')) { 
            inside = true;
            delete = false;
        }
        // special case, close bracket
        else if (input[i].Equals('>')) {
            inside = false;
            delete = false;
        }
        // other letters
        else if (inside) {
            // Once you have a space, ignore the rest until closing bracket
            if (input[i].Equals(' '))
                delete = true;
        }   
        // add if needed
        if (!delete)
                sb.Append(input[i]);
    }
    var result = sb.ToString(); // -> holds: "<p>Hello</p>"
}
void Main()
{
//你的意见
字符串输入=@“

Hello

”; //温度变量 StringBuilder sb=新的StringBuilder(); bool-inside=false; bool delete=false; //分析字符串 for(int i=0;i保持:“Hello

” }
在将Outlook邮件保存到数据库之前,我通常使用以下代码从Outlook邮件中删除内联样式、类、图像和注释:

    desc = Regex.Replace(desc, "(<style.+?</style>)|(<script.+?</script>)", "", RegexOptions.IgnoreCase | RegexOptions.Singleline);
    desc = Regex.Replace(desc, "(<img.+?>)", "", RegexOptions.IgnoreCase | RegexOptions.Singleline);
    desc = Regex.Replace(desc, "(<o:.+?</o:.+?>)", "", RegexOptions.IgnoreCase | RegexOptions.Singleline);
    desc = Regex.Replace(desc, "<!--.+?-->", "", RegexOptions.IgnoreCase | RegexOptions.Singleline);
    desc = Regex.Replace(desc, "class=.+?>", ">", RegexOptions.IgnoreCase | RegexOptions.Singleline);
    desc = Regex.Replace(desc, "class=.+?\s", " ", RegexOptions.IgnoreCase | RegexOptions.Singleline);

desc=Regex.Replace(desc),(
source=Regex.Replace(source),(所有答案都很好,但也可以使用此方法简单地完成:
“您的HTML字符串”。替换(“样式”、“数据标记”);

您也可以用同样的方法替换“class”。

请参阅:您(意外)丢失了结束引号吗?@RobP.,是的,对不起。更新了帖子。可能是因为这个问题被问了一百万次。正则表达式工作正常。但在代码中,它显示错误
无法识别的转义序列
“在字符串中。我应该怎么做?”我将其用作
@(@CSAT阅读有关c#字符串的内容。请注意,它不适用于其他标记,如“
    Endoderm“该怎么办?我还想删除
    ,那么我会将另一个正则表达式改成与样式相同的正则表达式吗?@CSAT它对我有效,所以请显示您是如何使用它的,这样我就可以告诉您有什么问题。如果您还想删除
    ,请参阅我的编辑。您的
    类=。+?>
    正则表达式模式会删除所有内容在
    class=
    和下一个
    之间的ng,这比你想要的要多。
    class=.+?\“
    可能就是你想要的。他应该使用
    class=“.+?”?"
    class='.+?'
    而不是
    class=.+?>
    我可以请你在源代码周围添加一些上下文吗?只有代码的答案很难理解。如果你能在文章中添加更多信息,这将有助于提问者和未来的读者。如果这样做,这也会失败,如果里面有,例如K\B\cap\left\{k |<\beta\right\}@MonsterMMORPG是的。它会的。
       source = Regex.Replace(source, "(<style.+?</style>)|(<script.+?</script>)", "", RegexOptions.IgnoreCase | RegexOptions.Singleline);
       source = Regex.Replace(source, "(<img.+?>)", "", RegexOptions.IgnoreCase | RegexOptions.Singleline);
       source = Regex.Replace(source, "(<o:.+?</o:.+?>)", "", RegexOptions.IgnoreCase | RegexOptions.Singleline);
       source = Regex.Replace(source, "<!--.+?-->", "", RegexOptions.IgnoreCase | RegexOptions.Singleline);
       source = Regex.Replace(source, "class=.+?>", ">", RegexOptions.IgnoreCase | RegexOptions.Singleline);
       source = Regex.Replace(source.Replace(System.Environment.NewLine, "<br/>"), "<[^(a|img|b|i|u|ul|ol|li)][^>]*>", " ");