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 回答