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 を使用しており、上記の例でわかるように、変数に数値を保存したいと考えています。各数値はその後の変数に関連しており、私の問題は、キャラクター

合計日数を 2 倍にしたい

次のコードは、各文字の前にある 1 桁の数字でのみ機能します

 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+ の 2 つのグループが含まれています。最初のグループは一連の数字に一致し、2 番目のグループは一連の文字に一致します。

正規表現が一致する限り文字列を一致させ、数字グループと文字グループを抽出し続けることができます。それに応じてそれらを解析します..

こちらの簡単なチュートリアルをチェックして、Match クラスを使用し、VB.net で正規表現を使用して一致を抽出する方法をすぐに確認してください。

于 2013-01-28T03:18:38.057 に答える