Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 基于包含语句的字符串构造VB代码_.net_Regex_Vb.net_String_Expression - Fatal编程技术网

.net 基于包含语句的字符串构造VB代码

.net 基于包含语句的字符串构造VB代码,.net,regex,vb.net,string,expression,.net,Regex,Vb.net,String,Expression,我要做的是在.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 Els

我要做的是在.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
应该返回这样一个:

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将字符串分成多个字符串,首先是“;”然后是“:”,通过对每个使用
,我成功地做到了这一点(尽管不是以非常优雅的方式)
这就是为什么我想知道是否有一种更精细的方法来实现这一点,也许使用正则表达式

最后一件事,你认为有没有一种快速的方法可以让所有的数字都用方括号括起来(变量ID),而不需要重复

例如,给定如下字符串:

   If ([3] = ‘M’ AND [4] = ‘S’ AND [5]>=1000 : 20/100 * [5]; 500)
我得到一个包含(3,4,5)的整数数组

在.NET中实现这些功能的最佳方法是什么?? 任何帮助都将不胜感激


另外,我找不到一个好的问题标题。

我知道这已经很晚了,但为了记录在案,您可以使用
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))