2014-03-04 1 views
1

내 제목은 이미 설명처럼,첫번째 숫자 문자까지 문자열을 가져

그것은 단지에 가능하지 .. 나는 (A 주소를 포함) 문자열의 하위 문자열을 싶어하고 나는 단지 거리를 가지고 싶습니다 텍스트 (숫자가 아닌) 문자를 가져 오면 상자가 남아 있기 때문입니다. > 은 '이'는 한 상자 번호 'developerstreet'을 가지고 싶습니다 - 이

예를 들어 'developerstreet의 123A'에 대한

이 있습니다 .. streetname에 공백을 포함 할 수 있으므로, 최초의 우주까지 문자열을하는 것은 불가능합니다 집에 관심이 없습니다.

어떻게 이것을 VB.NET에서 할 수 있습니까?

답변

3

주소를 구문 분석하는 것은 아주 어렵 기 때문에 선택 사항에 대해 매우 신중하게 검토해야합니다. 우체국에서 제공하는 문서를 검토하는 것이 좋습니다. 미국 주소 인 경우 USPS Publication 28부터 시작해야합니다.

그러나 특정 질문에 대답하려면 Char.IsDigit 메서드를 사용하여 문자열에서 첫 번째 숫자 문자의 인덱스를 찾을 수 있습니다. Char.IsNumber 메서드를 살펴볼 수도 있지만 실제로 원하는 것보다 포괄적 일 수 있습니다. 예를 들어, 이것은 input 문자열의 첫 번째 숫자 문자의 인덱스를 얻을 것이다 :

Dim index As Integer = -1 
For i As Integer = 0 to input.Length - 1 
    If Char.IsDigit(input(i)) Then 
     index = i 
     Exit For 
    End If 
Next 

그러나, 복잡한 문자열 구문 분석,이 같은, 내가 정규 표현식 학습을 제안한다. 문자열의 맨 앞에 숫자가 아닌 부분 얻기 RegEx로 단순해진다 :

  • ^ - 매칭 문자열 시작한다 : 여기서
    Dim m As Match = Regex.Match(input, "^\D+") 
    If m.Success Then 
        Dim nonNumericPart As String = m.Value 
    End If 
    

    는 상기 예에서의 일반 식의 의미 라인
  • \D의 시작 - 모든 숫자가 아닌 문자
  • + - 한 번 이상
0

이 시도 :

Private Sub MyFormLoad(sender As Object, e As EventArgs) Handles Me.Load 

    Dim str As String = "developerstreet 123a" 
      Dim index As Integer = GetIndexOfNumber(str) 
      Dim substr As String = str.Substring(0, index) 
      MsgBox(substr) 
    End Sub 



     Public Function GetIndexOfNumber(ByVal str As String) 
      For n = 0 To str.Length - 1 
       If IsNumeric(str.Substring(n, 1)) Then 
        Return n 
       End If 
      Next 
      Return -1 
     End Function 

출력 될 것입니다 : developerstreet

3

을 당신은 비까지 (\w+ 하나 이상의 단어 문자와 일치

' TODO: error checking 
Dim s = "developerstreet 123a" 
Dim r = Regex.Match(s, "\w+").Value ' r is now "developerstreet" ' 

처럼 간단한 regex을 사용할 수 있습니다 - 단어 문자가 있음).

관련 문제