RegEx

2013-12-13 3 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