2

私がこれをやろうとしているのは、次のような文字列を指定した.NETで次のケースの単純なパーサーを作成することです:

If  ([1] >=60 :  50; If ([1]>=50 :  40; If ([1]>=40 : 30; If([1]>=30 : 20;0))))

次のようなものを返す必要があります:

If  ([1] >=60) Then 
    Return 50
ElseIf ([1]>=50) Then
    Return 40
ElseIf ([1]>=40 ) Then
    Return 30
ElseIf([1]>=30 ) Then
    Return 20
Else
    Return 0
End If

split を使用して、文字列を最初に ";" で複数の文字列に分割します。そして、「:」と を使用して、For Eachなんとかそれを行うことができました(ただし、非常にエレガントな方法ではありません)。そのため、おそらく正規表現を使用して、これを行うより精巧な方法がないのではないかと思います。

最後に、角かっこ (変数 ID) で囲まれたすべての数字を重複せずに取得する簡単な方法があると思いますか。

たとえば、次のような文字列が与えられた場合:

   If ([3] = ‘M’ AND [4] = ‘S’ AND [5]>=1000 : 20/100 * [5]; 500)

たとえば、(3,4,5) を含む整数の配列を取得します。

そのようなものを.NETに実装する最良の方法は何ですか?? どんな助けでも大歓迎です

PS 質問の適切なタイトルが見つかりませんでした。

4

1 に答える 1

0

Regexこれが非常に遅いことはわかっていますが、記録のために、次のように使用してそのようなキャプチャを簡単に実現できます。

Dim input As String = "If ([3] = ‘M’ AND [40] = ‘S’ AND [5]>=1000 : 20/100 * [5]; 500)"
Dim r As Regex = New Regex("\[(\d+)\]")
Dim list As List(Of String) = New List(Of String)
For Each match As Match In r.Matches(input)
    If Not list.Contains(match.Groups(1).Value) Then
        list.Add(match.Groups(1).Value)
    End If
Next

Console.WriteLine("({0})", String.Join(",", list))
于 2014-07-22T10:53:10.373 に答える