使用InStr查找第一个不是某个字符的匹配项

时间:2012-08-20 13:33:59

标签: vb.net string

我正在尝试使用InStr在这样的字符串中找到第一个不是“0”的字符(从左侧开始):

000000000001
000000004092
000000000052
000000001006

这可以用InStr完成,还是应该使用不同的东西?

4 个答案:

答案 0 :(得分:4)

如果您要查找非零项目的索引(也可能是非数字),请使用此正则表达式:[^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

答案 1 :(得分:2)

如果您使用VB。 NET ,则应使用.NET方法。

一种方法是使用Enumerable.Where 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)

答案 2 :(得分:1)

使用正则表达式:

Regex.Match(yourString, "[1-9]")

答案 3 :(得分:0)

无法“否定”InStr的参数。

如果你知道输入,你可以简单地搜索不应该存在的内容(可能使用正则表达式)。

如果没有诸如输入字符的范围之类的细节,很难给出一些不那么通用的答案。比赛的规则是什么?这是怎么用的?