我正在尝试这样做是为.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中实现此类功能的最佳方法是什么? 任何帮助将不胜感激
P.S。我找不到这个问题的好标题。
答案 0 :(得分: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))