使用match.index查找第一次出现的正则表达式匹配

时间:2015-03-06 08:24:51

标签: regex vb.net

如何在regex中访问.index方法,所以在这种情况下它应该输出数字的第一个实例的位置

    Dim sourceString As String = "abcdefg12345"
    Dim textboxregex As Regex = New Regex("^(d)$")

    If textboxregex.IsMatch(sourceString) Then
        Console.WriteLine(Match.Index) 'this should display the location of the first occurrence of the pattern within the sourcestring
    End If

3 个答案:

答案 0 :(得分:1)

在这种情况下,你不需要正则表达式:

Dim digits = From chr In sourceString Where Char.IsDigit(chr)
Dim index = -1
If digits.Any() Then index = sourceString.IndexOf(digits.First())

或使用丑陋方法语法的一个语句:

Dim index As Int32 = "abcdefg12345".
    Select(Function(chr, ix) New With {chr, ix}).
    Where(Function(x) Char.IsDigit(x.chr)).
    Select(Function(x) x.ix).
    DefaultIfEmpty(-1).
    First()

答案 1 :(得分:0)

尝试Lookbehind:

Dim textboxregex As Regex = New Regex("(?<=\D)\d")
If textboxregex.IsMatch(sourceString) Then
    Console.WriteLine(textboxregex.Match(sourceString).Index)
End If

这将匹配所有非数字字符后数字的第一次出现。

答案 2 :(得分:0)

您的Regex表达式错误(在d之前需要'\'),并且尚未定义Match

Dim sourceString As String = "abcdefg12345"
Dim textboxregex As Regex = New Regex("\d")
Dim rxMatch as Match = textboxregex.Match(sourceString)

If rxMatch.success Then
    Console.WriteLine(rxMatch.Index) 'this should display the location of the first occurrence of the pattern within the sourcestring
End If