给出以下文件路径:
/Users/Lawrence/MyProject/some/very/interesting/Code.scala
我想使用单正则表达式替换生成以下内容(root可以是常量):
some.very.interesting
这是为了生成Sublime Text的片段,它可以自动为我的scala / java类插入正确的包/命名空间标题:)
Sublime Text使用以下语法进行正则表达式替换模式(又名“替换”):
{input/regex/replace/flags}
因此,为什么不能采用迭代方法 - 必须一次完成!此外,替换不能嵌套:(
答案 0 :(得分:1)
如果您知道嵌套文件夹的最大数量。您可以在正则表达式中指定。
用于1到3个嵌套文件夹
正则表达式:/Users/Lawrence/MyProject/(\w+)/?(\w+)?/?(\w+)?/[^/]+$
替换:$1.$2.$3
适用于1到5个嵌套文件夹
正则表达式:/Users/Lawrence/MyProject/(\w+)/?(\w+)?/?(\w+)?/?(\w+)?/?(\w+)?/[^/]+$
替换:$1.$2.$3.$4.$5
鉴于这些限制,这是你唯一能做的事情
答案 1 :(得分:1)
输入
/Users/Lawrence/MyProject/some/very/interesting/Code.scala
正则表达式
^/Users/Lawrence/MyProject/[^/]+/[^/]+/[^/]+/Code.scala
或
^/[^/]+/[^/]+/[^/]+/([^/]+)/([^/]+)/([^/]+)/
替换
\1.\2.\3
<强>更新强>
这会让你更接近,但不完全是:
正则表达式
(^/Users/Lawrence/MyProject/|/Code\.scala$|/)
替换
.
输出将是:
.some.very.interesting.
如果没有在一行中进行多次替换,并且没有递归的反向引用,那将很难。
你可能需要做第二次替换,用空字符串替换这样的东西(如果可以的话):
(^\.|\.$)