【问题标题】:Replacing strings and characters inside urls替换 url 中的字符串和字符
【发布时间】:2019-09-15 03:57:38
【问题描述】:

我正在尝试替换以特定模式开头的 url 中的字符,并在末尾添加“.html”。我正在使用 Sublime Text,但无法使其完全正常工作。

我想做3个开关:

  1. https://my.master.com 到 https__my.master.com
  2. 在每个网址的末尾添加“.html”
  3. 将这些网址中的“/”替换为“_”

重要提示:仅适用于以 href="https://my.master.com/@

开头的网址

示例:

href="https://my.master.com/@top-com/d/my-zen/"

我想得到的结果:

href="https__my.master.com_@top-com_d_my-zen_.html"

到目前为止我所做的尝试:

在 Sublime Text 中,我尝试将其放入查找字段中:

href="https://my.master.com/@([^\"]+)

在替换字段内:

href="https__my.master.com_@$1.html"

它适用于 1) 和 2) 但不适用于 3)。我不知道如何也用“_”替换“/”

我使用正则表达式得到的输出:

https__my.master.com_@top-com/d/my-zen/.html

这不是用于生产的东西

如果您更容易帮助我,我不介意连续进行 2 次查找和替换。

提前致谢!

【问题讨论】:

  • 只是好奇,您为什么需要进行这些替换?
  • Notepad++ 是一种选择吗?我有一个解决方案,但不幸的是,它不适用于 Sublime。

标签: regex sublimetext3


【解决方案1】:

根据您可能拥有的子目录数量,您可能会使用类似以下的一些表达式:

href="https:\/\/my\.master\.com\/@([^\/]*)\/([^\/]*)\/([^\/]*)\/"
href="https:\/\/my\.master\.com\/@([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/"

并用一些类似的字符串替换它们:

href="https:__my.master.com_@$1_$2_$3_.html"
href="https:__my.master.com_@$1_$2_$3_$4_.html"

几次。

Demo


如果您希望简化/修改/探索表达式,请在regex101.com 的右上角面板中进行说明。如果您愿意,您还可以在this link 中观看它如何与一些示例输入匹配。


【讨论】:

    【解决方案2】:

    如果 Notepad++ 适合您,您可以执行以下操作,不幸的是,它不适用于 SublimeText。

    这适用于 URL 中任意数量的斜杠。

    • Ctrl+H
    • 查找内容:(?:https|\G).*?\K:?/(")?
    • 替换为:_(?1.html$1:)
    • 检查环绕
    • 检查正则表达式
    • 取消选中. matches newline
    • 全部替换

    说明:

    (?:         # non capture group
      https     # literally
     |          # OR
      \G        # restart from last match position
    )           # end group
    .*?         # 0 or more any character but newline, not greedy
    \K          # forget all we have seen until this position
    :?          # optional colon
    /           # slash
    (")?        # group 1, a double quote, optional
    

    替换:

    _           #  underscore
    (?1         # if group 1  exists (i.e. there is a double quote)
        .html   # literally
        $1      # content of group 1
        :       # else
                # nothing
    )           # endif
    

    鉴于:

    href="https://my.master.com/@top-com/d/my-zen/"
    href="https://my.master.com/my-zen/"
    href="https://my.master.com/@top-com/d/e/f/g/my-zen/"
    

    给定示例的结果:

    href="https__my.master.com_@top-com_d_my-zen_.html"
    href="https__my.master.com_my-zen_.html"
    href="https__my.master.com_@top-com_d_e_f_g_my-zen_.html"
    

    屏幕截图(之前):

    屏幕截图(之后):

    【讨论】:

    • 非常感谢您的长篇回复。我希望我在使用 Sublime Text 之前已经看过它。社区需要更多像你这样的人! :)
    • @LeonardoDiaz:不客气。请注意,其他答案不适用于 URL 中未知数量的斜杠。
    猜你喜欢
    • 2012-06-25
    • 2023-02-06
    • 1970-01-01
    • 2011-12-17
    • 2020-03-08
    • 2011-07-02
    相关资源
    最近更新 更多