1

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

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

通过使用以下匹配子句,我似乎可以走得很远

.+main\/java\/|\/|[a-zA-Z$]+(\.java)

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

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

而且由于我对正则表达式不太擅长,所以无论如何我可能使用了完全错误的方法......

我将非常感谢任何帮助。

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

非常感谢!

编辑

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

编辑2

通过使用 python 脚本并将其作为 Sublime Text 中的命令运行,我能够做我想做的事。对于那些感兴趣的人,请参阅此GitHub 提交。我仍然很好奇是否有可能将所有这些变成一个单一的 RegEx。我什至不确定这是否可能......

4

1 回答 1

0

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

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

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

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

于 2012-02-29T00:12:23.403 回答