正则表达式查找替换字符串的开头和结尾

时间:2015-01-21 21:15:00

标签: regex replace sublimetext3

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

例如。在开头搜索包含/shop/的网址,在结尾搜索.htm。我希望将/shop/替换为/product/,并将.htm替换为转发/

e.g。

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

变为

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

此位找到实例,但我无法弄清楚如何替换开头和结尾。

shop[^<]+.htm

3 个答案:

答案 0 :(得分:2)

找到这个:

/shop/(.*?)\.htm

并替换为:

/product/\1/

答案 1 :(得分:1)

可以使用单个正则表达式完成,尝试:

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

答案 2 :(得分:0)

所以,你实际上并没有找到字符串的开头。你在&#34; .com&#34;之后正在寻找部分字符串。至于字符串结尾,$将匹配它。

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

取决于您需要的具体方式,表达式对:

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

会做你想要的那对替换。第一个也适用于由于某种原因而具有子串的任何东西&#34; com / shop /&#34;但是,正如我所说 - 如果你需要提高你的特异性。

如果你绝对需要在一个地方做到这一点:

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

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

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