我的技能非常基础。我希望找到 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
答案 0 :(得分:2)
找到这个:
/shop/(.*?)\.htm
并替换为:
/product/\1/
答案 1 :(得分:1)
可以使用单个正则表达式完成,尝试:
com\/\Kshop(\/.*?)\.htm
并替换为:
product\1/
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如何处理转义 - 其中一些(例如括号或反斜杠)可能需要转义