用于删除<a> tag text C#</a>之间逗号的正则表达式

时间:2012-11-28 05:39:55

标签: c# .net regex

我有以下字符串,我尝试了许多正则表达式来删除标记文本之间的逗号,但没有找到任何用于删除标记文本之间逗号的正则表达式。我希望,只要标签内的文字有逗号,就会被空字符串替换。

<a href="#" class="main">Getty Center, Restaurant at the</a>

我试过这个正则表达式但它不起作用,这里输入的是包含html的字符串。

input = Regex.Replace(input, @"<a(\s+[^>]*)?>[^\w\s]</a(\s+[^>]*)?>", "");

请帮帮我。谢谢

3 个答案:

答案 0 :(得分:1)

我建议使用HTML解析器。有很多可用的开源和免费。我找到的最好的一个是HTMLAgilityPack

的HTMLAgilityPack

Some 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标记的内容,搜索逗号并替换。