我正在尝试使用InStr在这样的字符串中找到第一个不是“0”的字符(从左侧开始):
000000000001
000000004092
000000000052
000000001006
这可以用InStr完成,还是应该使用不同的东西?
答案 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
的参数。
如果你知道输入,你可以简单地搜索不应该存在的内容(可能使用正则表达式)。
如果没有诸如输入字符的范围之类的细节,很难给出一些不那么通用的答案。比赛的规则是什么?这是怎么用的?