gpt4 book ai didi

java - 创建一个模式正则表达式以从 JAVA 中的字符串中提取小时和分钟

转载 作者:行者123 更新时间:2023-12-02 10:14:04 25 4
gpt4 key购买 nike

我正在尝试制作一个模式,它可以从 JAVA 中的字符串中给出小时和分钟。无论我尝试什么,一个或多个示例都会失败。

可以有以下组合。

  1. 1小时
  2. 2小时
  3. 1小时20分钟
  4. 3小时30分钟
  5. 3小时1分钟
  6. 1小时1分钟
  7. 1 分钟
  8. 10 分钟

    Pattern p = Pattern.compile("([\\d]+)\\s+[hour|hours]*\\s*([\\d]*)[^\\d]*");


    Matcher m = p.matcher("8 hours 2 minutes");

    // if an occurrence if a pattern was found in a given string...
    if (m.find()) {
    System.out.println("found");
    System.out.println(m.group(1)); // hours
    System.out.println(m.group(2)); // minutes
    }

最佳答案

您可以使用此正则表达式,并从匹配的相应组中提取小时和/或分钟。

^(?=.)(?:(?<hours>\d+) *hours?)?(?: *(?<minutes>\d+) *minutes?)?$

虽然我已经命名了这些组以使其更易于访问,但是,实际上并不需要如此。即使没有命名组,group1 将始终捕获小时,group2 将始终捕获分钟,无论您的数据包含什么,无论是仅小时还是仅分钟或两者兼而有之。

<强> Demo

另外,请查看此 Java 代码。

List<String> list = Arrays.asList("1 hour","2 hours","1 hour 20 minutes","3 hours 30 minutes","3 hours 1 minute","1 hour 1 minute","1 minute","10 minutes");
Pattern p = Pattern.compile("^(?=.)(?:(?<hours>\\d+) *hours?)?(?: *(?<minutes>\\d+) *minutes?)?$");

list.stream().forEach(x -> {
Matcher m = p.matcher(x);
if (m.matches()) {
System.out.println(x + " ----> Hours: " + m.group("hours") + ", Minutes: " + m.group("minutes"));
} else {
System.out.println(x + " ----> Didn't match");
}
});

打印,

1 hour ----> Hours: 1, Minutes: null
2 hours ----> Hours: 2, Minutes: null
1 hour 20 minutes ----> Hours: 1, Minutes: 20
3 hours 30 minutes ----> Hours: 3, Minutes: 30
3 hours 1 minute ----> Hours: 3, Minutes: 1
1 hour 1 minute ----> Hours: 1, Minutes: 1
1 minute ----> Hours: null, Minutes: 1
10 minutes ----> Hours: null, Minutes: 10

关于java - 创建一个模式正则表达式以从 JAVA 中的字符串中提取小时和分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54797625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com