2012-01-31 2 views
1
// LINE 1 
<td align="left" nowrap><font face="courier, monospace" size="-1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2002&nbsp;GC1)</font></td> 

// LINE 2 
<td align="left" nowrap><font face="courier, monospace" size="-1">&nbsp;99942&nbsp;Cocoon</font></td> 

위의 HTML 줄에서 필요한 작은 데이터를 긁어내는 간단한 정규식을 만들었습니다.식이 잘 작동하고 필요한 데이터를 두 그룹으로 묶습니다. = 2002 그룹 1, 그룹 2 = GC1 정규식 패턴에 두 번째 검색을 추가 하시겠습니까?

  • 라인 2 :

    정규 표현식 패턴 = ([0-9]+)&nbsp;([A-Za-z0-9]+)

    • 라인 1 그룹 1 = 99,942, 그룹 2 = 누에 고치

    내가 가진 내 데이터를 통해이를 실행하는 데 이제 시작 부분에 추가 숫자가있는 새로운 유형의 HTML 행이 있음을 알게되었습니다.

    // LINE 3 
    <td align="left" nowrap><font face="courier, monospace" size="-1">162421&nbsp;(2000&nbsp;CG70)</font></td> 
    
    • 라인 3 = 2000 그룹 1, 그룹 2 = CG70은

    내가 뭘하려고 추가로이 정규 표현식에 새로운되는 동일한 패턴 ([0-9]+)&nbsp; 일치하지만 162421을 캡처 내 패턴을 변경할 수있다 이 패턴을 내 패턴에 추가하는 방법을 확신 할 수 없습니다. 시도 할 때마다 이미 작동중인 검색을 무효화하거나 결과의 일부를 덮어 씁니다.

    참고 : iOS에서는 NSRegularExpression과 함께 사용하고 있습니다.

  • 답변

    1

    방법에 대해 : Btw는

    ([0-9]+)&nbsp;([A-Za-z0-9]*) 
    

    . 정규 표현식을 테스트하기 위해 this site을 사용합니다. 매우 유용합니다.

    2

    문자열의 초기 숫자에 대한 캡처 그룹을 추가해야합니다. 예에서이 자 다음에 "& nbsp"가옵니다. (하나 또는 여러 번)와 "(",이 모든 선택 사항입니다 정규식이 일치하는.

    (?:([0-9]+)(?:&nbsp;)+\()?([0-9]+)&nbsp;([A-Za-z0-9]+) 
        //^     ^   ^    capture groups 
    

    헤쳐 나왔지 부분은 캡처 범위와 함께 제공됩니다.

    을 이제 하나 개의 캡처 그룹 더있다, (다른 사람이 캡처 범위이며, 0 인덱스 범위 전체 일치 범위)에 NSTextCheckingResult 개체를 쿼리 할 때 당신은 항상 4 개 범위를해야합니다.

    그러나 일부 시간을, 마지막 두 유효합니다.
    가 되려면 테스트하려면 location memb 어 NSRange에 대해 NSNotFound입니다. 테스트가 성공하면 범위가 유효하며 조기 숫자를 맞추고 캡처합니다.

    관련 문제