用于将文件路径转换为包/命名空间的正则表达式

时间:2013-04-18 06:41:42

标签: regex sublimetext2 sublimetext sublimetext3

给出以下文件路径:

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

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

some.very.interesting

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

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

{input/regex/replace/flags}

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

2 个答案:

答案 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.

如果没有在一行中进行多次替换,并且没有递归的反向引用,那将很难。

你可能需要做第二次替换,用空字符串替换这样的东西(如果可以的话):

 (^\.|\.$)