我的字符串看起来像这样:
"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());
}
答案 0 :(得分: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...")
另请参阅此 short demo 。
您可能还需要有关 Regular Expressions 的更多信息。
答案 1 :(得分:1)
您需要时间和破折号之间的空格:\\s\\S*\\s
。只有第一次出现这样的空格。尝试将该空格设为可选:\\?\\S*\\s?
。
答案 2 :(得分: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