解析字符串中的数字

时间:2013-01-28 03:15:45

标签: .net regex vb.net

我有以下字符串格式,可以使用以下格式

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

1 个答案:

答案 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中使用正则表达式提取匹配项的快速入门。