Evdoku
Evdoku

Reputation: 21

Finding the first occurrence of a regex match using match.index

How do I access the .index method in regex, so in this case it should output the location of the first instance of a number

    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

Upvotes: 1

Views: 600

Answers (3)

Georg
Georg

Reputation: 414

Your Regex expression is wrong (you need the '\' before the d) and you haven't defined 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

Upvotes: 0

Tim Schmelter
Tim Schmelter

Reputation: 460238

In this case you dont need regex:

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

or in one statement with the ugly method syntax:

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()

Upvotes: 1

Florian Schmidinger
Florian Schmidinger

Reputation: 4692

Try a Lookbehind:

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

This will match the first occurence of a digit after all non digit characters.

Upvotes: 0

Related Questions