我想捕获匹配模式的组,其中输入可以包含该组一次或多次.
例:
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)); }
原文地址:https://www.jb51.cc/regex/356967.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。