1

我有看起来像这样的字符串:

"Mo 13:00 - 14:00, Di 15:00-19:00, Montag - Dienstag 18:00-23:00 Montag bis Samstag 03:00 bis 10:00"

我想创建这样的子字符串:

"Mo 13:00 - 14:00", "Di 15:00-19:00", "Montag - Dienstag 18:00-23:00"...

如果现在已经创建了这个模式:

"([a-zA-Z\\s]*\\d\\d[:]\\d\\d\\s\\S*\\s\\d\\d[:]\\d\\d)"

但是使用 Matcher.find() 我只能得到一个结果:"Mo 13:00 - 14:00"

这是一个示例代码,以防我犯了一个愚蠢的错误:

String xy = "Mo 13:00 - 14:00, Di 15:00-19:00, Montag - Dienstag 18:00-23:00 Montag bis      Samstag 03:00 bis 10:00";
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("([a-zA-Z\\s]*\\d\\d[:]\\d\\d\\s\\S*\\s\\d\\d[:]\\d\\d)");
java.util.regex.Matcher matcher = pattern.matcher(xy);
while(matcher.find())
{
    System.out.println(matcher.group());
}
4

3 回答 3

4

使用这样的正则表达式模式:

([a-zA-Z][a-zA-Z\\s-]*\\d\\d[:]\\d\\d\\s*\\S*?\\s*\\d\\d[:]\\d\\d)`
 \______/\___________/\_____________/\__/     \__/\_____________/
    |          |           ##:##       |_______|       ##:##
    |          |                           |
start with   accepts any number of       account for 
a letter     letters, spaces or "-"      optional spaces
             (Required for dates like:
              "Montag - Dienstag...")

另请参阅这个简短的演示

您可能还想了解更多关于正则表达式的信息。

于 2013-05-23T10:06:40.877 回答
1

您需要时间和破折号之间的空格:\\s\\S*\\s. 只有第一次出现有这样的空白。尝试使该空格可选:\\?\\S*\\s?.

于 2013-05-23T10:02:14.867 回答
1
String dates = "Mo 13:00 - 14:00, Di 15:00-19:00, Montag - Dienstag 18:00-23:00 Montag bis Samstag 03:00 bis 10:00";
        Pattern pattern = Pattern.compile("(.+?)((?<=\\d),?\\s(?=[A-Z])|$)");
        Matcher matcher = pattern.matcher(dates);
        while (matcher.find()) {
            System.out.println(matcher.group(1));
        }

输出:

Mo 13:00 - 14:00
Di 15:00-19:00
Montag - Dienstag 18:00-23:00
Montag bis Samstag 03:00 bis 10:00
于 2013-05-23T10:07:58.733 回答