2

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

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 并且我想将数字保存到变量中,正如您在上面的示例中看到的那样,每个数字都与它之后的变量相关,我的问题是我找不到在 a 之前获取数值的好方法特点

我想找到总天数加倍

以下代码仅适用于每个字符前的单个数字

 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
4

1 回答 1

4

这是正则表达式的主要候选者。像这样的东西会起作用:

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+。第一组匹配一堆数字,第二组匹配一堆字母。

只要正则表达式匹配,您就可以匹配字符串并继续提取数字组和字母组。并相应地解析它们..

在此处查看这个简单的教程,以快速开始使用 Match 类在 VB.net 中使用正则表达式提取匹配项。

于 2013-01-28T03:18:38.057 回答