2

给定以下文件路径:

/Users/Lawrence/MyProject/some/very/interesting/Code.scala

我想使用单个正则表达式替换生成以下内容(根可以是常量):

some.very.interesting

这是为了为 Sublime Text 生成一个片段,它可以为我的 scala/java 类自动插入正确的包/命名空间标头:)

Sublime Text 对其正则表达式替换模式(又名“替换”)使用以下语法:

{input/regex/replace/flags}

因此,为什么不能采用迭代方法 - 它必须一次性完成!此外,替换不能嵌套:(

4

2 回答 2

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


鉴于限制,这是您唯一可以做的事情

于 2013-04-18T07:08:41.993 回答
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.

如果在一行中没有多个替换并且没有递归反向引用,这将很困难。

您可能需要进行第二次替换,用空字符串替换类似这样的内容(如果可以的话):

 (^\.|\.$)
于 2013-04-18T07:09:07.910 回答