2015-01-29 3 views
0

정규 표현식을 사용하여 String을 여러 문자열로 파싱 할 수 있기를 원합니다. 예를 들어 주소를 사용합시다. "My Street 10 90210 Beverly Hills". 나는이에서 만들 수있는 문자열의 예 :Regex로 주소 구문 분석하기

  • My Street - 거리 이름
  • 10 - 봤는데 도시

- 우편 번호

  • Beverly Hills - 수
  • 90210 집 그것을 사용하기위한 패턴을 만들려고 노력하지만, 나는 String을 분석하고 해부 할 때 약간 길다.

    은 누군가가 나이 시작받을 수 있나요?

  • +3

    당신이 무엇을 시도했다 우리에게 보여 경우가 가장 잘 작동합니다. On 그래서 우리는 요청에 따라 코드를 작성하는 것을 선호하지 않습니다. 주문 사이트 프로그래밍이 아닙니다. –

    +0

    제 질문은 사람들이 저를 특정 클래스/문서로 연결 시켜서 계속 읽고 필요한 정보를 얻을 수 있도록하기위한 것입니다. – Aphex

    +0

    우편 번호는 항상 5 자리 숫자입니다. –

    답변

    1

    나는 string.split 기능을 사용할 수 있습니다.

    String s = "My Street 10 90210 Beverly Hills"; 
    String parts[] = s.split("\\s+(?=\\d+\\s+\\d+)|(?<=\\d+)\\s+(?=[A-Z])|(?<=\\d+)\\s+(?=\\d+)"); 
    System.out.println(Arrays.toString(parts)); 
    

    출력 :

    [My Street, 10, 90210, Beverly Hills] 
    

    설명 :

    • \\s+(?=\\d+\\s+\\d+)는 하나 개 이상의 숫자 더하기 하나 이상의 공백을 더한 또는 다음 않다면 하나 이상의 공백 만 일치 더 많은 자릿수. 집 번호 이전의 공간이이 조건을 만족시킬 것입니다. 그래서 일치했습니다.

    • | 교대 사업자라고.

    • (?<=\\d+)\\s+(?=[A-Z]) 하나 이상의 숫자와 그 뒤에 대문자가 오는 하나 이상의 공백과 일치합니다. 따라서 문자열 city 앞의 공백은이 조건을 충족시키고 일치합니다.

    • (?<=\\d+)\\s+(?=\\d+)

      는 자릿수에-모든 공백 일치한다. 집 번호와 우편 번호 사이의 공백이 일치합니다.

    • 당신에게 원하는 출력을 줄 것이다 일치하는 공간에 따라 입력을 분할.

    +0

    감사! 이게 내 문제를 해결했다. 정규 표현식 작성법에 대해 몇 마디 말씀해 주시겠습니까? 그리고 비슷한 표현을 만드는 법을 배울 수있는 곳은 어디입니까? 다시 한 번, 시간을내어 주셔서 감사합니다! – Aphex

    +0

    몇 가지 설명을 추가했습니다. www.regular-expressions.info 정규 표현식 학습을위한 최고의 사이트. –

    +1

    당신은 훌륭합니다. 이것은 모두 도움이됩니다. 감사! – Aphex