2013-10-21 5 views
0

일반적으로 주소의 일부 형태가있는 혼란스러운 문자열이 있습니다. 일부 경우에는 주소가 시작 부분에 CNR로 표시되어 있으므로 다음과 같은 경우 쉽게 사용할 수 있습니다. regex (전 VB에서 일하고 있어요) :문자열과 위치 사이의 정규식

사례 1 Instr CNR : Regex = New Regex ("(CNR) (. *?) (? SVSE | M | SVC | SVS | SVNE | SVNW) ", RegexOptions.RightToLeft)

문자열의 끝 부분은 일반적으로지도 참조로 끝 부분에서 찾고자하는 주소를 추출합니다. 이 주소가 있으면 위도와 경도를 결정하기 위해 주소를 지오 코딩 할 계획입니다.

그러나 어떤 경우에는 주소가 없으며 문자열에 주소가 그 시점 다음에 있음을 나에게 알리는 문구가 포함될 수 있습니다. 예를 들어, 지금 소방서 M 215 G2를 벗어나십시오. 이 경우 아래의 정규식을 사용합니다 :

사례 2 아니요 CNR : Regex = New Regex ("(([d] +) | ([\ d] + - [\ d] +) | ([\ d] + - [\ d] +) | CAR SMOLDERING | INPUT | OFF | 반대쪽 | CNR | 스파크 | INCIC1 | INCIC3 | STRUC1 | STRUC3 | G & SC1 | G & SC3 | ALARC1 | ALARC3 | NOSTC1 | NOSTC3 | RESAC1 | RESCC3 | HIARC1 | HIARC3 | 차량 사고 - 포위 된 사람 포획 된 폭발 | 폭발 사고 | 사고로 인한 사고 | ENT | LHS | RHS | 힘줄 선회 및 불꽃 폭파 | 화재로 화재 발생 | 차량 화재 | 화재 경보 | 가스 누출 | 가스관 | 가스 배출 | 사고 | 흡연 | 지붕 | 가스 | 필수 | 화재 | 차량 내 잠김 | 단발 카시트 | 사고 | 화재) (. *?) (? = \ SVSE | M | SVC | SVNE | SVNW) ", RegexOptions.RightToLeft)

모든 경우에 나는 오른쪽에서 왼쪽으로 작업하여 문자열의 앞부분이 언제 보일지를 찾고 나서지도 참조 직전까지 시작하고 싶습니다. 그러나 내 질문에 위의 (사례 2) 정규식을 사용하여 문구를 찾지 만 포함시키지 않으면 다른 사람을 포함시킬 수 있습니다. 예를 들어 문자열에 거리 번호가있는 경우 추출 된 문자열에 숫자를 포함하고 싶습니다. 그러나 REQUIRED가 있으면 추출하지 않습니다. I는 두 가지 예

줄 것이다

A : SPECIAL APPLIANCE의 TYPE-A REQUIRED 예 ST 교외 M 215 G5 B : HOUSE 화재 123 예 ST 교외 M 215 G5 A는, REQUIRED 어드레스의 일부가 아닌 경우

그래서 나는 추출 된 주소에 정규 표현식을 포함시키지 않으려 고 문자열로 출력합니다. EXAMPLE ST SUBURB.

경우 B는 거리 주소가 있으므로 제외하지 않으므로 추출 된 주소는 123 EXAMPLE ST SUBURB입니다.

그래서 위의 정규 표현식에서 문구 사이의 문자열을 추출하고 경우에 따라 문구를 포함하고 다른 문구에서 제외 할 수 있습니까?

이런 큰 질문에 사과드립니다. 충분한 정보를 제공했는지 확인하고 싶었습니다. 마지막 질문은 regex가 첫 번째 부분이 일치하는 부분 (예 : 문자열의 길이)을 처리 할 수 ​​있도록합니까? 예를 들어 위의 REQUIRED 부분에서 REQUIRED 부분이 35 자이고 Regex가 문자열 EXAMPLE SUBURB. 정규식에서 첫 번째 일치 항목의 위치를 ​​반환 할 수 있도록 문자열에서 추가 정보 (예 : 문자열 시작, 정규식 위치 A가 추출 될 때까지 특수 정보 유형 -A가 필요함)를 추출 할 수 있습니다.

도움 주셔서 감사합니다.

답변

1

나는 match.index와 match.length를 사용하여 질문의 한 부분을 얻었고 실제로 문자열이 끝난 곳 (예.위치)에서 내가 원하는 비트와 조각을 할 수 있습니다.

난 작동하지 수있는 유일한 비트는 내가 STREET1 이상이 포함 아래와 같이 정규식 예제를 사용하고 CNR을 포함하는 문자열 (예를 들어 정규식 일치를) 반환에 발견되는 경우가 아니라 할 수있는 방법 ROAD1입니다 :

Regex = New Regex (. *?) (? =? SVSE | M | SVC | SVSW | SVNE | SVNW) ", RegexOptions.RightToLeft)

예를 들어 내 문자열이 EXAMPLE이면 TEXT CNR 123 STREET SUBURB M 215 G2 그것은 CNR 123 STREET A SUBURB를 반환하지만 내 문자열이 EXAMPLE TEXT STREET1 STREET A SUBURB M 215 G2 인 경우에는 STREET A SUBURB \

I 비록 위의 예제에서 STREET1은 정규식이 시작되고 끝나는 지점이지만 STREET A는 다른 구문이 될 수 있기 때문에 일치 항목에 포함되지 않는다는 것을 지적해야합니다. STREET A를 찾아 볼 수는 없습니다.

감사합니다.

관련 문제