VB.Net上的正则表达式只能从左到右获取前几个数字

时间:2011-08-15 14:31:02

标签: regex vb.net

我对正则表达式很陌生,但就我一直在Google上游荡而言,我唯一能解决问题的方法就是使用正则表达式。

我有一组字符串,其中包含以下模式:

“3 - 橘子,柠檬”
“4 - 菠萝,橙子”
“12 - Lime,草莓”

我目前的代码是:

Private Sub cmbKelas_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbKelas.SelectedIndexChanged
        LblID.Text = cmbKelas.Text
End Sub

它给整个字符串输出..我想要的是cmbKelas.Text将其值剥离,因此每个字符串将变为:

“3”
“4”
“12”

只有前几个数字。评论,建议或指向正确的链接/文章会有所帮助,因为到目前为止,我无法找到一个容易理解的体面教程。

3 个答案:

答案 0 :(得分:4)

正则表达式对此任务来说太过分了。

您可以使用IndexOf method找出第一个空格出现的位置,然后使用Substring method将字符串的开头提升到第一个空格的索引。

Dim values As String() = New String() { _
    "3 - Orange, Lemon", _
    "4 - Pineapple, Orange", _
    "12 - Lime, Strawberry" _
}

For Each input as String In values
    Dim number As String = input.Substring(0, input.IndexOf(" "))
    Console.WriteLine(number)
Next

或者,您可以使用Split method拆分空格并获取拆分结果数组中的第一项,如下所示:

For Each input as String In values
    Dim split As String() = input.Split(" "c)
    Dim number As String = split(0)
    Console.WriteLine(number)
Next

答案 1 :(得分:1)

作为SubString的替代方案,您可以使用Split

Dim numbers = new List(Of String)()
For Each input as String In values
    Dim parts = input.Split(New Char() {" "c})
    If (parts.Length > 0) Then
        numbers.Add(parts[0])
    End If
Next

答案 2 :(得分:1)

如果您想使用正则表达式执行此操作,可以使用以下内容:

Dim ResultString As String
ResultString = Regex.Match(SubjectString, "^\d+").Value

其中SubjectString是您要搜索的字符串。

解释(因为你是regex的新手):

  • ^表示字符串的开头(表示您不匹配的原因) 数字不在开头)
  • \d表示数字0-9 (它是[0-9]的缩写形式,也可以这样做)
  • +表示 +之前的字符至少匹配一次。

这样你就会在字符串的开头匹配1到无限数字。