2012-02-28 50 views
1

我想用一个正则表达式来转换一个完全合格的路径(例如/ home/user/java/project/src/main/java/com/website/project/File。 java)转换成相应的Java包。正则表达式:完整路径到Java包

这意味着,我想去掉一切之前和包括的“java /”,文件名加斜杠开头。然后将所有剩余的斜线变成圆点。

我似乎能够通过使用以下匹配这条

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

,并以点代替变得相当远。 (正则表达式基本上查找之前和之后的所有内容,包括“main/java /”,然后用/替换所有/,然后删除文件名。

问题是我现在有太多的点,我显然不能摆脱自从我用点:)

更换既然我没有使用正则表达式太出色了,我可能使用一种完全错误的做法反正...

我将非常感谢任何帮助。

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

非常感谢!

编辑

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

EDIT2

我能够做什么,我想用一个Python脚本,并运行在崇高的文本命令。 对于有兴趣的人,请看GitHub commit。我仍然很好奇是否有可能将所有这些变成一个RegEx。我甚至不相信这是可能的...

+0

你为什么要逃避'/'s? – 2012-02-28 23:23:02

+0

我相信他在Perl/sed/awk中思考,其中斜杠是正则表达式分隔符。 – 2012-02-28 23:28:15

+0

噢,是的,我是逃避斜线,因为它是分隔符... – Tim 2012-02-28 23:53:25

回答

0

我真的不知道你想要做什么,你需要“注入”此正则表达式,但以下的正则表达式将返回两个捕获组中,第一个是路径的Java文件,第二个是文件名本身:

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

您可以在第一捕获组'.'然后更换'/'再追加一个点和捕获的第二字符串给你充分限定的Java类名称。

正如我所说,我不知道为什么你不能够使用变量的限制,但希望工作正则表达式是你向前迈进了一步。