Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# 用于删除HTML标记的正则表达式_C#_.net_Regex - Fatal编程技术网

C# 用于删除HTML标记的正则表达式

C# 用于删除HTML标记的正则表达式,c#,.net,regex,C#,.net,Regex,我使用以下常规表达式从字符串中删除html标记。除非我留下结束标记,否则它会工作。如果我尝试删除:,它将保留 我根本不知道正则表达式的语法,并且在这里摸索。能否有人与正则表达式知识,请提供一个模式,将工作我 这是我的密码: string sPattern = @"<\/?!?(img|a)[^>]*>"; Regex rgx = new Regex(sPattern); Match m = rgx.Match(sSummary); string sResult

我使用以下常规表达式从字符串中删除html标记。除非我留下结束标记,否则它会工作。如果我尝试删除:
,它将保留

我根本不知道正则表达式的语法,并且在这里摸索。能否有人与正则表达式知识,请提供一个模式,将工作我

这是我的密码:

  string sPattern = @"<\/?!?(img|a)[^>]*>";
  Regex rgx = new Regex(sPattern);
  Match m = rgx.Match(sSummary);
  string sResult = "";
  if (m.Success)
   sResult = rgx.Replace(sSummary, "", 1);
string sPattern=@“]*>”;
Regex rgx=新的Regex(sPattern);
匹配m=rgx.Match(sSummary);
字符串sResult=“”;
如果(m.成功)
sResult=rgx.Replace(sSummary,“,1);

我希望删除第一次出现的
标记。

使用正则表达式解析HTML充满了陷阱。HTML不是常规语言,因此无法使用正则表达式100%正确解析。这只是您将遇到的许多问题之一。最好的方法是使用HTML/XML解析器来完成这项工作

这是我不久前写的一篇博文的链接,其中详细介绍了这个问题

也就是说,这里有一个解决方案可以解决这个特殊问题。但这绝不是一个完美的解决方案

var pattern = @"<(img|a)[^>]*>(?<content>[^<]*)<";
var regex = new Regex(pattern);
var m = regex.Match(sSummary);
if ( m.Success ) { 
  sResult = m.Groups["content"].Value;

var pattern=@“]*>(?[^所以大家谈论的HTML解析器是


如果是干净的XHTML,还可以使用
System.Xml.Linq.XDocument
System.Xml.XmlDocument

以下是我使用简单正则表达式创建的扩展方法,用于从字符串中删除HTML标记:

/// <summary>
/// Converts an Html string to plain text, and replaces all br tags with line breaks.
/// </summary>
/// <returns></returns>
/// <remarks></remarks>
[Extension()]
public string ToPlainText(string s)
{

    s = s.Replace("<br>", Constants.vbCrLf);
    s = s.Replace("<br />", Constants.vbCrLf);
    s = s.Replace("<br/>", Constants.vbCrLf);


    s = Regex.Replace(s, "<[^>]*>", string.Empty);


    return s;
}
//
///将Html字符串转换为纯文本,并用换行符替换所有br标记。
/// 
/// 
/// 
[扩展名()]
公共字符串ToPlainText(字符串s)
{
s=s.Replace(“
”,Constants.vbCrLf); s=s.Replace(“
”,常量.vbCrLf); s=s.Replace(“
”,常量.vbCrLf); s=Regex.Replace(s,“]*>”,string.Empty); 返回s; }

希望这会有所帮助。

您可以使用现有的库来去除html标记。一个很好的方法是。

这是我已经使用了很长时间的扩展方法

public static class StringExtensions
{
     public static string StripHTML(this string htmlString, string htmlPlaceHolder) {
         const string pattern = @"<.*?>";
         string sOut = Regex.Replace(htmlString, pattern, htmlPlaceHolder, RegexOptions.Singleline);
         sOut = sOut.Replace("&nbsp;", String.Empty);
         sOut = sOut.Replace("&amp;", "&");
         sOut = sOut.Replace("&gt;", ">");
         sOut = sOut.Replace("&lt;", "<");
         return sOut;
     }
}
公共静态类StringExtensions
{
公共静态字符串StripHTML(此字符串为htmlString,字符串为htmlPlaceHolder){
常量字符串模式=@“”;
字符串sOut=Regex.Replace(htmlString,pattern,htmlPlaceHolder,RegexOptions.Singleline);
sOut=sOut.Replace(“,String.Empty”);
sOut=sOut.替换(“&;”、“&”);
sOut=sOut.Replace(“,”>”);
sOut=sOut.Replace(“,”要将其打开:

'<td>mamma</td><td><strong>papa</strong></td>'
您需要将标记替换为空格:

.replace(/<[^>]*>/g, ' ')
然后使用以下命令修剪前导和尾随空格:

.trim();
这意味着您的remove tag函数如下所示:

function removeTags(string){
  return string.replace(/<[^>]*>/g, ' ')
               .replace(/\s{2,}/g, ' ')
               .trim();
}
函数removeTags(字符串){
返回字符串。替换(/]*>/g“”)
.replace(/\s{2,}/g',)
.trim();
}

为了删除标记之间的空格,您可以使用以下方法组合使用正则表达式和修剪输入html开头和结尾的空格:

    public static string StripHtml(string inputHTML)
    {
        const string HTML_MARKUP_REGEX_PATTERN = @"<[^>]+>\s+(?=<)|<[^>]+>";
        inputHTML = WebUtility.HtmlDecode(inputHTML).Trim();

        string noHTML = Regex.Replace(inputHTML, HTML_MARKUP_REGEX_PATTERN, string.Empty);

        return noHTML;
    }
公共静态字符串StripHtml(字符串inputtml)
{
常量字符串HTML_标记_正则表达式_模式=@“]+>\s+(?=”;
inputHTML=WebUtility.HtmlDecode(inputHTML.Trim();
string noHTML=Regex.Replace(inputtml,HTML\u MARKUP\u Regex\u PATTERN,string.Empty);
返回noHTML;
}
因此,对于以下输入:

      <p>     <strong>  <em><span style="text-decoration:underline;background-color:#cc6600;"></span><span style="text-decoration:underline;background-color:#cc6600;color:#663333;"><del>   test text  </del></span></em></strong></p><p><strong><span style="background-color:#999900;"> test 1 </span></strong></p><p><strong><em><span style="background-color:#333366;"> test 2 </span></em></strong></p><p><strong><em><span style="text-decoration:underline;background-color:#006600;"> test 3 </span></em></strong></p>      
测试文本测试1测试2测试3
输出将仅为html标记之间没有空格或html前后没有空格的文本: “测试文本测试1测试2测试3”


请注意,
测试文本
之前的空格来自
测试文本
html,
测试3
之后的空格来自
测试3

html。

使用c#中的正则表达式从字符串中删除图像(图像搜索由图像id执行)

stringprq=
var regex=new regex(“(match.Groups[1].Value+”);
可以使用:

Regex.Replace(source, "<[^>]*>", string.Empty);
Regex.Replace(源代码“]*>”,string.Empty);

为什么不尝试不情愿的量词?
htmlString.replaceAll(“,”)

(这是Java,但最重要的是展示这个想法)

去掉HTML元素(带/不带属性)
/|/g
这将去除所有HTML元素并留下文本。即使对于格式错误的HTML元素(即缺少结束标记的元素),这也很有效

(例10)

简单方法

String html = "<a>Rakes</a> <p>paroladasdsadsa</p> My Name Rakes";

html = html.replaceAll("(<[\\w]+>)(.+?)(</[\\w]+>)", "$2");

System.out.println(html);
String html=“Rakesparoladasdsadsa

My Name Rakes”; html=html.replaceAll(“(.+?)()”,“$2”); System.out.println(html);
如果只需要查找开始标记,可以使用以下正则表达式,它将标记类型捕获为$1(a或img),内容(包括结束标记,如果有)捕获为$2:


(?:]*)?>(?:(?!)\s*(?:(?!这段代码可以帮助您轻松删除任何html标记:

import re
string = str(<a href="blah">blah</a>)
replaced_string = re.sub('<a.*href="blah">.*<\/a>','',string) // remember, sub takes 3 arguments.
重新导入
string=str()
替换的_string=re.sub('.'','',string)//记住,sub接受3个参数。

输出是一个空字符串。

如果您所要做的只是删除标记(而不知道结束标记在哪里),我真的不知道人们为什么对它如此担心

这个正则表达式似乎可以处理任何我可以扔给它的东西:

-整个过程以任意数量的空格结束,然后是结束括号 显然,如果有人向它抛出超级无效的html,这会搞砸,但它适用于我提出的任何有效的东西。在这里测试它:


const regex=/string前后的示例将有助于“我正在使用…正则表达式删除html标记”这是您的问题。请改用html解析器。可能重复的-,尽管标题不同,这是一个完全重复的示例。Promise。因为其他人看不到
Regex.Replace(source, "<[^>]*>", string.Empty);
/<\/?[\w\s]*>|<.+[\W]>/g
String html = "<a>Rakes</a> <p>paroladasdsadsa</p> My Name Rakes";

html = html.replaceAll("(<[\\w]+>)(.+?)(</[\\w]+>)", "$2");

System.out.println(html);
(?:<(a|img)(?:\s[^>]*)?>)((?:(?!<\1)[\s\S])*)
(?:<(a|img)(?:\s[^>]*)?>)\s*((?:(?!<\1)[\s\S])*)\s*(?:<\/\1>)
import re
string = str(<a href="blah">blah</a>)
replaced_string = re.sub('<a.*href="blah">.*<\/a>','',string) // remember, sub takes 3 arguments.