用户Java正则表达式从字符串中提取数据

用户Java正则表达式从字符串中提取数据,java,regex,Java,Regex,这是输入格式: <1> today is <2> current time is <3> humidity is <4> 我想得到Hello,03/17,03:20和50% 有人能告诉我正则表达式应该是什么吗?更新: Found greeting: Hello Found date: 03/17 Found time: 03:20 Found humidity: 50% 您可以使用带有正则表达式的匹配器来提取所需的模板输入语句的各个部分 Str

这是输入格式:

<1> today is <2> current time is <3> humidity is <4>
我想得到
Hello
03/17
03:20
50%


有人能告诉我正则表达式应该是什么吗?

更新:

Found greeting: Hello
Found date: 03/17
Found time: 03:20
Found humidity: 50%
您可以使用带有正则表达式的匹配器来提取所需的模板输入语句的各个部分

String input = "Hello today is 03/17 current time is 03:20 humidity is 50%";
Pattern p = Pattern.compile("(.*) today is (.*) current time is (.*) humidity is (.*)");
Matcher m = p.matcher(input);
if (m.find()) {
        System.out.println("Found greeting: " + m.group(1));
        System.out.println("Found date: " + m.group(2));
        System.out.println("Found time: " + m.group(3));
        System.out.println("Found humidity: " + m.group(4));
}
输出:

Found greeting: Hello
Found date: 03/17
Found time: 03:20
Found humidity: 50%
请注意,捕获组从索引1开始,而不是从0开始,因为
m.group(0)
返回应用正则表达式的整个原始字符串

以下是我的原始答案,是在您更新问题之前给出的:

一种简单的方法是用空格分隔句子,然后保留至少包含一个数字的任何术语:

String input = "Hello today is 01/17 current time is 03:20 humidity is 50%.";
String[] parts = input.split("\\s+");
for (String part : parts) {
    if (part.matches(".*\\d+.*")) {
        System.out.println(part);
    }
}

更新:

Found greeting: Hello
Found date: 03/17
Found time: 03:20
Found humidity: 50%
您可以使用带有正则表达式的匹配器来提取所需的模板输入语句的各个部分

String input = "Hello today is 03/17 current time is 03:20 humidity is 50%";
Pattern p = Pattern.compile("(.*) today is (.*) current time is (.*) humidity is (.*)");
Matcher m = p.matcher(input);
if (m.find()) {
        System.out.println("Found greeting: " + m.group(1));
        System.out.println("Found date: " + m.group(2));
        System.out.println("Found time: " + m.group(3));
        System.out.println("Found humidity: " + m.group(4));
}
输出:

Found greeting: Hello
Found date: 03/17
Found time: 03:20
Found humidity: 50%
请注意,捕获组从索引1开始,而不是从0开始,因为
m.group(0)
返回应用正则表达式的整个原始字符串

以下是我的原始答案,是在您更新问题之前给出的:

一种简单的方法是用空格分隔句子,然后保留至少包含一个数字的任何术语:

String input = "Hello today is 01/17 current time is 03:20 humidity is 50%.";
String[] parts = input.split("\\s+");
for (String part : parts) {
    if (part.matches(".*\\d+.*")) {
        System.out.println(part);
    }
}

到目前为止你试过什么?绳子总是这样吗?每个字段的最大大小是多少?这需要更多的细节。@EvanKnowlesHanks Evan。我已经更新了问题。这是固定模式吗?@sameerasy是的,这是固定模式。但是,。。可以是任何字符串。到目前为止,您尝试了什么?绳子总是这样吗?每个字段的最大大小是多少?这需要更多的细节。@EvanKnowlesHanks Evan。我已经更新了问题。这是固定模式吗?@sameerasy是的,这是固定模式。但是,。。可以是任何字符串。