【问题标题】:Regex replace double spaces when not in SRC or HREF不在 SRC 或 HREF 中时,正则表达式替换双空格
【发布时间】:2012-12-06 23:33:15
【问题描述】:

目前我正在做一个项目来去除所有不必要的 HTML。我已经完成了,但我正在使用以下代码替换双空格:

Private Function stripDubbleSpace(ByVal fileContent As String) As String
    While fileContent.IndexOf("  ") <> -1
        fileContent = fileContent.Replace("  ", " ")
    End While
    Return fileContent.Replace("  ", " ")
End Function

上面的代码有效,但在 HREF 或 SRC 中,当您将双倍空格替换为 1 个空格时,url 将变为 404。不要问为什么我的网址中有空格,我知道这不是最好的方法。

示例:
/images/my img.jpg(2 个空格)将替换为 /images/my img.jpg(1 个空格),不应替换。

如何只替换不在 HREF 或 SRC 中的双空格?

【问题讨论】:

  • &lt;pre&gt;&lt;script&gt; 或...您最好使用适当的HTML 解析器,如HTML Agility Pack。
  • Agility Pack 很容易找到元素,但您也可以使用该库缩小 HTML 吗?

标签: regex vb.net


【解决方案1】:

您用单空格替换双空格的代码并没有真正使用正则表达式。如果你想要正则表达式,那么它应该如下所示:

myurl = myurl.replace(/\s{2,}/g, ' ');

下一步是扩展上述正则表达式以检测HREFSRC 标签并跳过它们。

Reference 1

Reference 2

【讨论】:

  • 我知道我目前没有使用 REGEX,但我正在寻找一种不会替换 SRC 或 HREF 中的双空格的解决方案。
  • 感谢您的信息。但你现在和我在同一个地方。如何扩展该正则表达式,这就是我的问题所在?
  • Niels 很抱歉回来晚了。也许我完全忽略了后半部分。大多数HREF SRC 正则表达式似乎会导致真正丑陋和长模式。所以we shouldn't really pass html by regex我相信@Rawling提到的你会更好:Html Agility Pack
【解决方案2】:

使用Html Agility Pack。 Regex 不够聪明,无法解析带有嵌套结构的 Html,或者至少,您最终会遇到极其复杂的 Regex 表达式。

【讨论】:

    【解决方案3】:

    最后我不想使用解析器,因为仅此功能将花费更多时间。我的最终解决方案是找到所有属性 KEY="VALUE"。用标签替换这些属性中的空格。然后将所有双空格替换为 1 个空格,最后将标签替换为一个空格。现在属性仍然会保留空间,我不需要图书馆。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 2020-09-12
      • 2011-07-09
      • 2016-12-12
      • 1970-01-01
      相关资源
      最近更新 更多