正则表达式:Java包的完整路径

时间:2012-02-28 23:19:45

标签: java regex path package sublimetext

我想使用单个正则表达式将完全限定的路径(例如/home/user/java/project/src/main/java/com/website/project/File.java)转换为相应的Java包

这意味着,我想删除之前的所有内容,包括“java /”,文件名加上一个前导斜杠。然后将所有剩余的斜线变成点。

通过使用以下匹配子句

,我似乎能够走得很远
.+main\/java\/|\/|[a-zA-Z$]+(\.java)

并用点替换。 (正则表达式基本上查找“main / java /”之前的所有内容,然后替换all / with。然后删除文件名。

问题是我现在有太多的点,我显然无法摆脱,因为我用点代替:)

因为我对正则表达式不太好,所以我可能正在使用完全错误的方法......

我非常感谢任何帮助。

PS:不幸的是,我只需要使用一个正则表达式,因为我只能注入一个而不能将结果保存到临时变量或类似的东西中。

非常感谢!

修改

我正在尝试为TextMate / Sublime Text创建一个tmSnippet。 我想自动将短语“package com.company.project”(但实际的包名称)添加到新文件中。 问题在于,在这样的片段中,您可以获取文件的完整路径并在输出之前通过正则表达式运行它。这就是为什么我只能使用一个正则表达式。

EDIT2

我能够通过使用python脚本并将其作为Sublime Text中的命令运行来完成我想要的操作。 对于有兴趣的人,请参阅此GitHub commit。我仍然很好奇是否可以将所有这些转变为单一的RegEx。我甚至不确定它是否可能......

1 个答案:

答案 0 :(得分:0)

我不确定你要做什么以及你需要“注入”这个正则表达式,但是下面的正则表达式将返回两个捕获组,第一个是Java文件的路径,第二个作为文件名本身:

.+main\\/java\\/([[A-Za-z0-9]+\\/]+)\\/([A-Za-z0-9]+)\\.java

然后,您可以使用'/'替换第一个捕获的组上的'.',然后附加一个点,第二个捕获的String将为您提供完全限定的Java类名称。

正如我所说,我不确定为什么你有限制不能使用变量,但希望正在运行的正则表达式对你来说是一个进步。