2013-12-13 71 views
0
[0-6, 1-3][01-20, 22-23]22/123 

从上面的输入中,我想提取以下文本。使用RegEx提取字符串

0-6, 1-3 
01-20, 22-23 
22 
123 

以下代码片段提取除第一个以外的所需文本。

Pattern depArrHours = Pattern.compile("^(\\[(.+)\\]){2}(.+)\\/(.+)$"); 
    Matcher matcher = depArrHours.matcher("[0-6, 1-3][01-20, 22-23]22/123"); 
    if (matcher.matches()) { 
     System.out.println(matcher.group(0)); 
     System.out.println(matcher.group(1)); 
     System.out.println(matcher.group(2)); 
     System.out.println(matcher.group(3)); 
     System.out.println(matcher.group(4)); 
    } 

输出:

[0-6, 1-3][01-20, 22-23]22/123 
[01-20, 22-23] 
01-20, 22-23 
22 
123 

能否请你帮我解决我的正则表达式模式也提取第一部分(0-6,1-3)?

回答

1

你可以尝试指定每个(\\[(.+)\\])独立的,而不是{2}

Pattern depArrHours = Pattern.compile("^(\\[(.+)\\])(\\[(.+)\\])(.+)\\/(.+)$"); 
Matcher matcher = depArrHours.matcher("[0-6, 1-3][01-20, 22-23]22/123"); 
if (matcher.matches()) { 
    System.out.println(matcher.group(0)); 
    System.out.println(matcher.group(1)); 
    System.out.println(matcher.group(2)); 
    System.out.println(matcher.group(3)); 
    System.out.println(matcher.group(4)); 
    System.out.println(matcher.group(5)); 
    System.out.println(matcher.group(6)); 
} 

输出:

[0-6, 1-3][01-20, 22-23]22/123 
[0-6, 1-3] 
0-6, 1-3 
[01-20, 22-23] 
01-20, 22-23 
22 
123 
1

您应该分别指定每个第一2组:

Pattern depArrHours = Pattern.compile("^(\\[(.+)\\])(\\[(.+)\\])(.+)\\/(.+)$"); 
1

尝试模式

\\[([^\\]]*)\\]|(([0-9]*)/([0-9]*)) 

matcher.find()

Pattern depArrHours = Pattern.compile("\\[([^\\]]*)\\]|(([0-9]*)/([0-9]*))"); 
Matcher matcher = depArrHours.matcher("[0-6, 1-3][01-20, 22-23]22/123"); 
while (matcher.find()) { 
    String group = matcher.group(1); 
     if (group == null) { 
      // matched 22/123 
      System.out.println(matcher.group(3)); 
      System.out.println(matcher.group(4)); 
     } else { 
      // matched [0-6, 1-3] or [01-20, 22-23] 
      System.out.println(group); 
     } 
} 

输出使用

0-6, 1-3 
01-20, 22-23 
22 
123 
1

尝试,

String input="[0-6, 1-3][01-20, 22-23]22/123"; 
    String[] arr=input.replace('[', ' ').split("[\\]/]"); 
    for (String string : arr) { 
     System.out.println(string.trim()); 
    } 
1

尝试

String k ="[0-6, 1-3][01-20, 22-23]22/123"; 
    Pattern p = Pattern.compile("\\[([^\\]]*)\\]|([0-9]*)/([0-9]*)"); 
    Matcher m = p.matcher(k); 
    while(m.find()){ 
     System.out.println((m.group(1)!=null)?m.group(1):m.group(2)+"\n"+m.group(3)); 
    } 

正则表达式\\[([^\\]]*)\\]|([0-9]*)/([0-9]*)可以表示为

enter image description here

输出

0-6, 1-3 
01-20, 22-23 
22 
123 
相关问题