获取子字符串直到第一个数字字符

时间:2014-03-04 12:39:06

标签: vb.net

就像我已经解释过的标题一样,我想获得一个字符串的子串(包含一个地址),我想只有街道..

不可能只采用文本(非数字)字符,因为这样就会保留该框。 在第一个空格之前不可能使用子字符串,因为街道名称可以包含空格..

例如'developerstreet 123a' - >想要'developerstreet' 'a'是房子的箱号,我对此不感兴趣。

如何在VB.NET中执行此操作?

3 个答案:

答案 0 :(得分:4)

解析地址是非常困难的,所以我提醒你要确保你非常慎重地考虑你做出的选择。我强烈建议您查看邮政服务提供的文件。如果这些是美国地址,您应该首先查看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 - 任何非数字字符
  • + - 一次或多次

答案 1 :(得分: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

答案 2 :(得分:0)

text.Substring(0, text.IndexOfAny("0123456789"))