加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:26:08 所属栏目:百科 来源:网络整理
导读:我想捕获匹配模式的组,其中输入可以包含该组一次或多次. 例: input = 12361 randomstuff371 12 Mar 16 138more random381 stuff73f 我想拍摄“12月16日”. 从这里我很容易使用正则表达式: pattern = (".*(d{2}sw+sd{2}).*"); 但是我的麻烦是,当
我想捕获匹配模式的组,其中输入可以包含该组一次或多次.

例:

input = 12361 randomstuff371 12 Mar 16 138more random381 stuff73f

我想拍摄“12月16日”.

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

pattern = (".*(d{2}sw+sd{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}sw+sd{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("bd{2}sw+sd{2}b");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    System.out.println(matcher.group(0)); 
}

见online Java demo和regex demo.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读