Java - 正则表达式在某些单词之后和之前拆分字符

时间:2016-07-17 15:21:35

标签: java regex

我在查找如何使用JAVA中的正则表达式获取字符串的某个部分时遇到了麻烦。这是我的输入字符串:

application.APPLICATION NAME.123456789.status

我需要抓住名为"APPLICATION NAME"的字符串部分。我不能简单地分析期间字符,因为APPLICATION NAME本身可能包含一个句号。第一个单词"application"将始终保持不变,"APPLICATION NAME"后的字符将始终为数字。

我能够分开期间并抓住第一个指数,但正如我所提到的,APPLICATION NAME本身可能包含句号,所以这不好。我也能够抓住一个时期的第一个和倒数第二个指数,但这似乎是无效的,并且希望通过使用REGEX来面向未来。

我已经搜索了好几个小时,并且找不到多少指导。谢谢!

3 个答案:

答案 0 :(得分:1)

您可以将^application\.(.*)\.\dfind()一起使用,或将application\.(.*)\.\d.*matches()一起使用。

使用find()的示例代码:

private static void test(String input) {
    String regex = "^application\\.(.*)\\.\\d";
    Matcher m = Pattern.compile(regex).matcher(input);
    if (m.find())
        System.out.println(input + ": Found \"" + m.group(1) + "\"");
    else
        System.out.println(input + ": **NOT FOUND**");
}
public static void main(String[] args) {
    test("application.APPLICATION NAME.123456789.status");
    test("application.Other.App.Name.123456789.status");
    test("application.App 55 name.123456789.status");
    test("application.App.55.name.123456789.status");
    test("bad input");
}

输出

application.APPLICATION NAME.123456789.status: Found "APPLICATION NAME"
application.Other.App.Name.123456789.status: Found "Other.App.Name"
application.App 55 name.123456789.status: Found "App 55 name"
application.App.55.name.123456789.status: Found "App.55.name"
bad input: **NOT FOUND**

只要" status"不以数字开头。

答案 1 :(得分:0)

使用split(),您可以将key.split("\\.")保存在String[] s中,然后再从s[1]加入s[s.length-3]

使用正则表达式,您可以:

String appName = key.replaceAll("application\\.(.*)\\.\\d+\\.\\w+")", "$1");

答案 2 :(得分:0)

为何分裂?只是:

String appName = input.replaceAll(".*?\\.(.*)\\.\\d+\\..*", "$1");

这也正确地处理应用程序名称中的点然后数字,但只有在您知道输入是预期格式的情况下才能正常工作。

处理"坏"如果模式不匹配则返回空白输入,更严格并使用一个总是匹配(替换)整个输入的可选项:

String appName = input.replaceAll("^application\\.(.*)\\.\\d+\\.\\w+$|.*", "$1");