正则表达式:捕获一个或多个组(如果存在)(Java)
Regex: Capture one or more groups if exists (Java)
我想捕获与输入可以包含该组一次或多次的模式相匹配的组。
示例:
input = 12361 randomstuff371 12 Mar 16 138more random381 stuff73f
我想捕捉“2016 年 3 月 12 日”。
由此我很容易地使用了正则表达式:
pattern = (".*(\d{2}\s\w+\s\d{2}).*");
但是我的麻烦是,当输入可以包含多个这些组时,我无法捕获后续匹配项。
示例:
input = randomstuff371 12 Mar 16 14 Jan 15 13 Feb 16 138more random381 stuff73f
这样:
group 1 = 12 Mar 16
group 2 = 14 Jan 15
group 3 = 13 Feb 16
要匹配的这些组的数量总是不同的,所以我想知道是否有一个正则表达式可以处理包含 1 个或多个这些组的输入。我试过:
pattern = (".*(\d{2}\s\w+\s\d{2}\s)+.*"); \ Not sure about whitespace at the end
但是它不起作用。这是否与我存储这些捕获的组的方式有关?我无法预先确定我需要的组数,特别是因为正则表达式需要处理其中的许多输入。
我觉得我最好捕获整个日期段并稍后使用 matcher.find()
处理它以计算我需要的组数。
任何帮助将不胜感激。
仅匹配您的特定模式并将子字符串作为使用 Matcher#find()
:
获得的多个匹配项会更容易
String s = "randomstuff371 12 Mar 16 14 Jan 15 13 Feb 16 138more random381 stuff73f";
Pattern pattern = Pattern.compile("\b\d{2}\s\w+\s\d{2}\b");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
System.out.println(matcher.group(0));
}
参见online Java demo and the regex demo。
我在模式中添加了单词边界以确保模式与整个单词匹配,但如果您的子字符串粘附到另一个文本,它们可能会被省略。
我想捕获与输入可以包含该组一次或多次的模式相匹配的组。
示例:
input = 12361 randomstuff371 12 Mar 16 138more random381 stuff73f
我想捕捉“2016 年 3 月 12 日”。
由此我很容易地使用了正则表达式:
pattern = (".*(\d{2}\s\w+\s\d{2}).*");
但是我的麻烦是,当输入可以包含多个这些组时,我无法捕获后续匹配项。
示例:
input = randomstuff371 12 Mar 16 14 Jan 15 13 Feb 16 138more random381 stuff73f
这样:
group 1 = 12 Mar 16
group 2 = 14 Jan 15
group 3 = 13 Feb 16
要匹配的这些组的数量总是不同的,所以我想知道是否有一个正则表达式可以处理包含 1 个或多个这些组的输入。我试过:
pattern = (".*(\d{2}\s\w+\s\d{2}\s)+.*"); \ Not sure about whitespace at the end
但是它不起作用。这是否与我存储这些捕获的组的方式有关?我无法预先确定我需要的组数,特别是因为正则表达式需要处理其中的许多输入。
我觉得我最好捕获整个日期段并稍后使用 matcher.find()
处理它以计算我需要的组数。
任何帮助将不胜感激。
仅匹配您的特定模式并将子字符串作为使用 Matcher#find()
:
String s = "randomstuff371 12 Mar 16 14 Jan 15 13 Feb 16 138more random381 stuff73f";
Pattern pattern = Pattern.compile("\b\d{2}\s\w+\s\d{2}\b");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
System.out.println(matcher.group(0));
}
参见online Java demo and the regex demo。
我在模式中添加了单词边界以确保模式与整个单词匹配,但如果您的子字符串粘附到另一个文本,它们可能会被省略。