C# 用于删除HTML标记的正则表达式
我使用以下常规表达式从字符串中删除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
,它将保留
我根本不知道正则表达式的语法,并且在这里摸索。能否有人与正则表达式知识,请提供一个模式,将工作我
这是我的密码:
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(" ", String.Empty);
sOut = sOut.Replace("&", "&");
sOut = sOut.Replace(">", ">");
sOut = sOut.Replace("<", "<");
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=“RakesparoladasdsadsaMy 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.