【问题标题】:Regex to Find Replace Beginning and End of String正则表达式查找替换字符串的开头和结尾
【发布时间】:2015-03-20 13:07:53
【问题描述】:

我的技能非常基础。我希望为 Sublime Text 3 找到一个正则表达式,它可以通过开头和结尾找到一个字符串。我想保持中间不变,我只想替换开头和结尾。

例如。搜索以/shop/ 开头并以.htm 结尾的url。然后我想用/product/ 替换/shop/ 并用转发/ 替换.htm

例如

http://www.website.com/shop/ford-truck-hitch-extension.htm

变成

http://www.website.com/product/ford-truck-hitch-extension/

这个位找到了实例,但我不知道如何替换开头和结尾。

shop[^<]+.htm

【问题讨论】:

    标签: regex replace sublimetext3


    【解决方案1】:

    找到这个:

    /shop/(.*?)\.htm
    

    并替换为:

    /product/\1/
    

    【讨论】:

    • 如果使用 VS Code 查找替换,请在 /product/\1/ 中使用 $1 而不是 \1
    【解决方案2】:

    可以用一个正则表达式来完成,试试:

    com\/\Kshop(\/.*?)\.htm
    

    并替换为:

    product\1/
    

    DEMO

      NODE                     EXPLANATION
    --------------------------------------------------------------------------------
      com                      'com'
    --------------------------------------------------------------------------------
      \/                       '/'
    --------------------------------------------------------------------------------
      \K                       Resets the starting point of the reported match
                               ie: Everything that has been matched till this 
                                   point won't be changed
    --------------------------------------------------------------------------------
      shop                     'shop'
    --------------------------------------------------------------------------------
      (                        group and capture to \1:
    --------------------------------------------------------------------------------
        \/                     '/'
    --------------------------------------------------------------------------------
        .*?                    any character except \n (0 or more times
                               (matching the least amount possible))
    --------------------------------------------------------------------------------
      )                        end of \1
    --------------------------------------------------------------------------------
      \.                       '.'
    --------------------------------------------------------------------------------
      htm                      'htm'
    

    要了解更多关于正则表达式的信息,请随时访问 The Stack Overflow Regular Expressions FAQ

    【讨论】:

      【解决方案3】:

      因此,您实际上并不是在寻找字符串的开头。您正在寻找“.com”之后的部分字符串。至于字符串的结尾,$ 将匹配它。

      我还建议使用两个表达式,因为它使两个替换更明显。

      根据您需要的具体程度,这对表达式:

      s|com/shop/|com/product/|
      s|\.htm$|/|
      

      会做你想要的一对替换。第一个也适用于由于某种原因具有子字符串“com/shop/”的任何东西,正如我所说的——如果你需要提高特异性,你可以。

      如果您绝对需要一次性完成:

      s|com/shop/(.*)\.htm$|com/product/\1/|
      

      将选择并保存括号之间的所有内容并将其重新插入到最终结果中,让您可以进行所需的两项更改。

      PS:我不确定 sublimetext 如何处理转义——其中一些(例如括号或反斜杠)可能需要转义

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-04
        • 1970-01-01
        • 2021-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-17
        相关资源
        最近更新 更多