我有以下字符串,我尝试了许多正则表达式来删除标记文本之间的逗号,但没有找到任何用于删除标记文本之间逗号的正则表达式。我希望,只要标签内的文字有逗号,就会被空字符串替换。
<a href="#" class="main">Getty Center, Restaurant at the</a>
我试过这个正则表达式但它不起作用,这里输入的是包含html的字符串。
input = Regex.Replace(input, @"<a(\s+[^>]*)?>[^\w\s]</a(\s+[^>]*)?>", "");
请帮帮我。谢谢
答案 0 :(得分:1)
我建议使用HTML解析器。有很多可用的开源和免费。我找到的最好的一个是HTMLAgilityPack
的HTMLAgilityPackSome Examples的一些例子 简而言之,以下代码段将为您提供所有标记
HtmlDocument myDoc = new HtmlDocument();
myDoc.Load(path);
HtmlNodeCollection imgs = new HtmlNodeCollection(myDoc.DocumentNode.ParentNode);
imgs = myDoc.DocumentNode.SelectNodes("//img");
希望有所帮助
答案 1 :(得分:1)
您可以使用正则表达式查找和修改标签的内容,如此。
var input = "<a href=\"#\" class=\"main\">Getty Center, Restaurant at the</a>";
var regex = new Regex(@"<a[^>]*>(?<content>.*?)</a[^>]*>",
RegexOptions.Singleline);
var match = regex.Match(input);
while (match.Success) {
var group = match.Groups["content"];
input = input.Substring(0, group.Index)
+ group.Value.Replace(",", "")
+ input.Substring(group.Index + group.Length);
match = regex.Match(input, group.Index);
};
循环适用于在同一个字符串中捕获多个标记。然而,正则表达式相当天真。它会混淆嵌套在A标记内的标记,如果>
位于任何属性中,它将无法解析。 (尽管这可能是糟糕的HTML。)出于这个原因,建议使用正确的HTML解析器。
答案 2 :(得分:0)
如果要直接使用替换,则必须仅匹配逗号,而不是逗号之前或之后的文本。您必须使用前瞻并查看后面以检查逗号是否在标记中。虽然这是可行的,但不建议这样做。
另一种方法是使用匹配组来匹配标记中的整个文本,并将逗号分组(如果存在)并替换匹配。
<a[^>]+>[\w\s]*(,?)[\w\s]*<\/a>
第一个捕获组会捕获逗号(如果存在)。你可以在这里测试一下。 [http://rubular.com/r/K2jjIaObty][1]
最好的选择是使用html解析器捕获a
标记的内容,搜索逗号并替换。