我有以下字符串格式,可以使用以下格式
2Y11M23D4H means Y=2,M=11,D=23,H=4
11Y2M11D19H means Y=11,M=2,D=11,H=19
3Y4H Y=3,H=4
51H H=51
我正在使用vb.net并且我想将数字保存到变量中,正如您在上面的例子中看到的那样,每个数字都与它后面的变量有关,我的问题是我找不到一个好的方法来获取数值字符前面的值
我想找到总天数为双倍
以下代码仅适用于每个字符前的单个数字
If periodstring.Contains("Y") Then
totaldays += Convert.ToDouble(periodstring.Substring(periodstring.IndexOf("Y") - 1).First) * 365
End If
If periodstring.Contains("M") Then
totaldays += Convert.ToDouble(periodstring.Substring(periodstring.IndexOf("M") - 1).First) * 30
End If
If periodstring.Contains("D") Then
totaldays += Convert.ToDouble(periodstring.Substring(periodstring.IndexOf("D") - 1).First)
End If
If periodstring.Contains("H") Then
totaldays += Convert.ToDouble(periodstring.Substring(periodstring.IndexOf("H") - 1).First) / 24
End If
答案 0 :(得分:4)
这是Regular Expressions的主要候选人。像这样的东西会起作用:
Dim rex as RegEx
rex = new RegEx("(\d+)(\w+)")
Dim startPos as Int
Dim m as Match
startPos = 0
Do
m = rex.Match(inputString, startPos)
If(m.Success) Then
' m.Groups(1) will contain the digits
' m.Groups(2) will contain the letter
startPos = startPos + m.Length
End if
While(m.Success)
正则表达式包含两组:\ d +和\ w +。第一组匹配一堆数字,第二组匹配一堆字母。
只要正则表达式匹配,就可以匹配字符串,并继续提取数字组和字母组。并相应地解析它们。
查看此simple tutorial here以获得使用Match类在VB.net中使用正则表达式提取匹配项的快速入门。