我有一个这样的目录,我试图从“photon.exe”之前提取单词“photon”。

C:\workspace\photon\output\i686\diagnostic\photon.exe(已暂停)线程(正在运行)

我的代码如下所示:

String path = "C:\workspace\photon\output\i686\diagnostic\photon.exe(Suspended) Thread(Running)";
Pattern pattern = Pattern.compile(".+\\\\(.+).exe");

Matcher matcher = pattern.matcher(path);

System.out.println(matcher.group(1));

尽管这个正则表达式在http://www.regexplanet.com/simple/index.html上运行,但无论尝试什么排列,我都会不断收到IllegalStateExceptions等。

在此先感谢您的帮助。这时我非常沮丧>。<

最佳答案

您可以使用以下正则表达式:^.*\\(.*)\.exe.*$,文件名将位于第一个匹配组中。这是一个example

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main
{
    public static void main(final String[] args)
    {
        final String input = args[0];
        final Pattern pattern = Pattern.compile("^.*\\\\(.*)\\.exe.*$");
        final Matcher matcher = pattern.matcher(input);
        if (matcher.find())
        {
            System.out.println("matcher.group(1) = " + matcher.group(1));
        }
        else
        {
            System.out.format("%s does not match %s\n", input, pattern.pattern());
        }
    }
}

使用C:\workspace\photon\output\i686\diagnostic\photon.exe(Suspended) Thread(Running)作为输入运行它,这是预期的输出:
matcher.group(1) = photon

10-08 02:23