在vb.net中使用Like可以使用一系列负数和正数进行模式匹配吗

在vb.net中使用Like可以使用一系列负数和正数进行模式匹配吗,vb.net,pattern-matching,Vb.net,Pattern Matching,我有一个用户输入的字符串: "{0.3064, 15.6497, 60.7668, 52.1362, 76.6645, 97, -15.8315, -6.8806, 5.547, -2.3381, -23.9905, 40.4569, 60.1592, 27.1418, 42.9375, -22.8297, -11.7423, -17.1576, -33.9918, 7.0585}" 我希望能够根据开头有一个“{”,结尾有一个“}”,逗号之间有20个逗号分隔的数字,介于-

我有一个用户输入的字符串:

"{0.3064, 15.6497, 60.7668, 52.1362, 76.6645, 97, -15.8315, -6.8806, 5.547, -2.3381, -23.9905, 40.4569, 60.1592, 27.1418, 42.9375, -22.8297, -11.7423, -17.1576, -33.9918, 7.0585}" 
我希望能够根据开头有一个“{”,结尾有一个“}”,逗号之间有20个逗号分隔的数字,介于-1000和1000之间,来验证它

我尝试过使用下面的like操作符,但没有成功。无论与模式是否匹配,一切都返回False。如何基于此模式进行验证

这就是我尝试过的:

ArrayOk = ArrayValues1txt.Text Like "{[(1000)-1000],[(1000)-1000],[(1000)-1000],[(1000)-1000],[(1000)-1000],[(1000)-1000],[(1000)-1000],[(1000)-1000],[(1000)-1000],[(1000)-1000],[(1000)-1000],[(1000)-1000],[(1000)-1000],[(1000)-1000],[(1000)-1000],[(1000)-1000],[(1000)-1000],[(1000)-1000],[(1000)-1000],[(1000)-1000]}"
If ArrayOk = False Then
MsgBox("Wrong array pattern!  Pattern must contain 20 elements and be in the form {#,#}",
MessageBoxButtons.OK, "Bad Array Entered")
    GoTo Canceller
    Else
    End If

您可以使用正则表达式来验证的一般模式:是否有20个十进制值,它们之间用括号中的逗号分隔

Dim pattern=“^{((-\d+(\.\d+)),\s?{19}(-\d+(\.\d+))}$”
Dim input=“{0.3064、15.6497、60.7668、52.1362、76.6645、97、-15.8315、-6.8806、5.547、-2.3381、-23.9905、40.4569、60.1592、27.1418、42.9375、-22.8297、-11.7423、-17.1576、-33.9918、7.0585}”
如果(Regex.IsMatch(输入,模式))那么
如果结束
验证其是否与特定模式匹配后,可以通过执行以下操作验证数字是否与数字范围验证匹配:

  • 从管柱上拆下支架
  • 用逗号分隔字符串
  • 删除项目中多余的空格
  • 将项目转换为小数(双精度、十进制等)
  • 检查项目是否在范围内
  • 您可以使用LINQ执行许多步骤,这将使其更加简洁:

    Dim pattern=“^{((-\d+(\.\d+)),\s?{19}(-\d+(\.\d+))}$”
    Dim input=“{0.3064、15.6497、60.7668、52.1362、76.6645、97、-15.8315、-6.8806、5.547、-2.3381、-23.9905、40.4569、60.1592、27.1418、42.9375、-22.8297、-11.7423、-17.1576、-33.9918、7.0585}”
    如果(Regex.IsMatch(输入,模式))那么
    input=input.Replace(“{”,String.Empty)。Replace(“}”,String.Empty)
    尺寸项目=输入。拆分(“,”)
    Dim convertedItems=items.Select(函数(项)Convert.ToDouble(项.Trim()).ToArray()
    
    If(convertedItems.All)(Function(item)item>=-1000和also item我使用
    String.StartsWith
    String.EndsWith
    来测试大括号。接下来,我用
    子字符串
    将它们切掉。然后用逗号分割字符串。我检查是否正好有20个元素

    如果我们走到这一步,我循环遍历每个元素。修剪掉任何前导或尾随空格并将其更改为双精度。然后我可以进行数字比较

    Private Function ValidateArray(input As String) As Boolean
        If Not input.StartsWith("{") OrElse Not input.EndsWith("}") Then
            Return False
        End If
        input = input.Substring(1, input.Length - 2)
        Dim splits = input.Split(","c)
        If splits.Length <> 20 Then
            Return False
        End If
        For Each n In splits
            Dim dbl = CDbl(n.Trim)
            If dbl > 1000 OrElse dbl < -1000 Then
                Return False
            End If
        Next
        Return True
    End Function
    
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim IsValid = ValidateArray("{0.3064, 15.6497, 60.7668, 52.1362, 76.6645, 97, -15.8315, -6.8806, 5.547, -2.3381, -23.9905, 40.4569, 60.1592, 27.1418, 42.9375, -22.8297, -11.7423, -17.1576, -33.9918, 7.0585}")
        MessageBox.Show(IsValid.ToString)
    End Sub