我想使用单个正则表达式将完全限定的路径(例如/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。我甚至不确定它是否可能......
答案 0 :(得分:0)
我不确定你要做什么以及你需要“注入”这个正则表达式,但是下面的正则表达式将返回两个捕获组,第一个是Java文件的路径,第二个作为文件名本身:
.+main\\/java\\/([[A-Za-z0-9]+\\/]+)\\/([A-Za-z0-9]+)\\.java
然后,您可以使用'/'
替换第一个捕获的组上的'.'
,然后附加一个点,第二个捕获的String将为您提供完全限定的Java类名称。
正如我所说,我不确定为什么你有限制不能使用变量,但希望正在运行的正则表达式对你来说是一个进步。