繁体   English   中英

正则表达式:捕获一个或多个组(如果存在)(Java)

[英]Regex: Capture one or more groups if exists (Java)

我想捕获匹配模式的组,其中输入可以包含该组一次或多次。

例:

input = 12361 randomstuff371 12 Mar 16 138more random381 stuff73f

我想拍摄“12月16日”。

从这里我很容易使用正则表达式:

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

要匹配的这些组的数量总是不同的,所以我想知道是否有一个正则表达式可以在包含一个或多个这些组的输入上工作。 我试过了:

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)); 
} 

请参阅在线Java演示正则表达式演示

我在模式中添加了单词边界以确保模式匹配为整个单词,但如果将子字符串粘贴到另一个文本,则可以省略它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM