我有一个这样的字符串:
正确的字符串
Dim value As String = "45, 2111,56, 1, 9, 99, 62,"
无效字符串:
Dim value As String = "10.01, 12,, . , , "
我需要无限期地评估这种格式的字符串, 正则表达式评估串联的逗号,只是整数。
答案 0 :(得分:4)
这个应该有效:
^(\d+, ?)*\d*$
它允许以逗号分隔的数字列表,逗号和下一个数字之间可能有空格。也允许空列表(空字符串)。
答案 1 :(得分:1)
试试这个:
Public Function test(ByVal test_strring$) As Boolean
Try
Dim pattern$ = "(?s)^(\d+\s*,\s*)+$"
' (?s)^(\d+\s*,\s*)+$
'
' Match the remainder of the regex with the options: dot matches newline (s) «(?s)»
' Assert position at the beginning of the string «^»
' Match the regular expression below and capture its match into backreference number 1 «(\d+\s*,\s*)+»
' Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
' Note: You repeated the capturing group itself. The group will capture only the last iteration. Put a capturing group around the repeated group to capture all iterations. «+»
' Match a single digit 0..9 «\d+»
' Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
' Match a single character that is a “whitespace character” (spaces, tabs, and line breaks) «\s*»
' Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
' Match the character “,” literally «,»
' Match a single character that is a “whitespace character” (spaces, tabs, and line breaks) «\s*»
' Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
' Assert position at the end of the string (or before the line break at the end of the string, if any) «$»
Return Regex.IsMatch(test_strring, pattern, RegexOptions.None)
Catch ex As Exception
MsgBox(ex.ToString)
Return False
End Try
End Function