【问题标题】:Regular expression to ignore white space from html tag content用于忽略 html 标记内容中的空格的正则表达式
【发布时间】:2015-05-14 09:59:39
【问题描述】:

我有一个包含如下链接的字符串:

string source = "<img src='ftp://c//hafiz hussain//appdata//images//image.bmp' />"

我使用以下正则表达式删除了src 内容:

string regexSrc = @"<img[^>]*?src\s*=\s*[""']?([^'"" >]+?)[ '""][^>]*?>";
MatchCollection matchesImgSrc = Regex.Matches(source , regexSrc, RegexOptions.IgnoreCase | RegexOptions.Singleline);

只有在文件夹名称没有空格的情况下才能正常工作。对于上述情况,matchesImgSrc[1].Groups[1].Value 只匹配到 'ftp://c//hafiz'

空格后的内容被忽略。

【问题讨论】:

  • 从 char 类中删除空格。最好使用 html 解析器。

标签: c# html regex


【解决方案1】:
<img[^>]*?src\s*=\s*[""']?([^'"">]+?)['""][^>]*?>

你可以试试这个。查看演示。

https://regex101.com/r/mT0iE7/22

【讨论】:

    【解决方案2】:

    如我所见,您有一个符合 XML 的 HTML。因此,我建议使用XElement 来完成这项任务。

    var source = "<img src='ftp://c//hafiz hussain//appdata//images//image.bmp' />";
    var elt2 = XElement.Parse(source);
    var imgs = elt2.DescendantsAndSelf("img");
    foreach (var im in imgs)
    {
        var att = im.Attributes().Where(p => p.Name.LocalName.ToLower() == "src");
        if (att != null)
        {
           im.SetAttributeValue("src", string.Empty);
        }
    }
    // Converting back to string to see the result
    var resst = elt2.ToString();
    

    输出:

    正则表达式解决方案可用作后备:

    var source = "<img src='ftp://c//hafiz hussain//appdata//images//image.bmp' />";
    var regexSrc = @"(?<=<img[^>]*?)src\s*=\s*[""']?([^'"">]+)[ '""](?=[^>]*?>)";
    var reslt = Regex.Replace(source, regexSrc, "src=\"\"");
    

    输出:&lt;img src="" /&gt;

    【讨论】:

    • 如果我是你,我会使用基于 XElement 的解决方案作为主要解决方案,并且仅在 XML 不正确/无效的情况下使用正则表达式解决方案。
    猜你喜欢
    • 2021-09-13
    • 2020-08-06
    • 2012-03-22
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 2014-02-17
    • 2018-11-23
    • 2015-05-08
    相关资源
    最近更新 更多