InStrを使用して、次のような文字列で「0」(左側から開始)ではない最初の文字を見つけようとしています。
000000000001
000000004092
000000000052
000000001006
これはInStrで実行できますか、それとも別のものを使用する必要がありますか?
ゼロではない(数字以外の場合もある)アイテムのインデックスを探している場合は、次の正規表現を使用します。[^0]
Dim pos as Integer = Regex.Match(str, "[^0]").Index
正規表現関数には、次のライブラリ呼び出しが必要であることに注意してください。
Imports System.Text.RegularExpressions
文字列が完全にゼロで構成されている場合、これはうまく機能しないため、式を変更して、ゼロが文字列の最後の(または唯一の)文字になるようにすることができます。
`([^0])|(0$)`
^--- This meta-character matches an end-of-string marker
VBを使用している場合。NETでは、.NETメソッドを使用する必要があります。
Enumerable.Where
1つの方法は、次のLinq
方法を使用 することです。
Dim value = "000000000001"
Dim firstNotZero = From c In value Where c <> "0"c
If firstNotZero.Any Then
Dim first As Char = firstNotZero.First
End If
編集:LinqまたはRegexを使用したくない場合は、単純なループを使用することもできます。
Dim lines = {"000000000001", "000000004092", "000000000052", "000000001006"}
Dim firstDigits As New List(Of Char)
For Each line In lines
For Each c In line
If c <> "0"c Then
firstDigits.Add(c)
Exit For
End If
Next
Next
これにより、最初に0文字ではないすべての文字が。に追加されますList(Of Char)
。
正規表現を使用します。
Regex.Match(yourString, "[1-9]")
のパラメータを「否定」する方法はありませんInStr
。
入力がわかっている場合は、そこにあるべきではないものを簡単に検索できます(おそらく正規表現を使用して)。
入力文字の範囲はどのくらいですか?などの詳細がなければ、答えとして一般的でないものを提供することは困難です。どのルールが試合を支配しますか?これはどのように使用されますか?