我有一个包含多个值的数据集。我想从数据表 BLABLA 中获取该数据集中的这些行,该数据集包含一个"S",数字从 0 到 6。然后我想在消息框中显示它们。
我的正则表达式是S[0-6]
。
Dim answer As String = ""
Dim myregex As Regex = New Regex("S[0-6]")
Dim SearchRows() As DataRow = datasetB.Tables("BLABLA").Select("Data LIKE '%myregex%'")
For k As Integer = 0 To SearchRows.Length - 1
If answer = "" Then
answer = SearchRows(k).Item("Data")
Else
answer = answer & vbNewLine & SearchRows(k).Item("Data")
End If
Next
MsgBox(answer)
不幸的是SearchRows
是空的。我无法通过调试找到原因。 我做错了什么?
DataTable.Select
方法不支持正则表达式。 正如文档所述,它确实允许您将filterExpression
字符串作为参数传递,但仅仅因为它采用过滤器表达式并不意味着它支持正则表达式。 相反,它主要支持与 T-SQL 中的 WHERE
子句相同的表达式。 T-SQL 的LIKE
运算符不支持正则表达式模式,DataTable.Select
也不支持。 请参阅此文档以了解 DataTable.Select
方法的 LIKE
运算符支持的模式表达式的规则。
LIKE
运算符支持的过滤器表达式不如正则表达式高级,因此几乎可以肯定不可能构造如此特定的过滤器表达式。 如果有一种方法可以过滤到 0 到 6 之间的数字,我不知道它,文档也没有提到它。 所以,如果你真的需要按正则表达式过滤行,你仍然可以这样做,但你需要选择所有行,然后自己过滤它们:
Dim SearchRows() As DataRow = datasetB.Tables("BLABLA").Select().
Where(Function(r) myregex.IsMatch(r.Item("Data").ToString())).
ToArray()