我有以下一些数据的变体列表,我一直在尝试找出一个正则表达式,以便能够将所有这些数据分成两组。A 组应为UM,B 组应为832或832.0(如果小数点后应跟随任何数字)。例如,如果它是 UM832.56.NI,则只想为 B 组获取832.56。A组将始终是字母,并且应该始终以字符串开头,但正如您所见,它们在结尾处有一个。如果我能想出适合除那个之外的所有内容的东西,我会很乐意为那个抛出一个错误。
- UM 832.0.N
- 嗯 832.0
- 嗯 832.N
- 嗯 832
- UM832
- 832UM
- UM832.0.N
- UM832.0
- UM832.N
我想出了下面的正则表达式,它可以部分工作。
(?<GroupA>^[a-zA-Z]*)|(?<GroupB>\d*[\.]*\d*)
我从中得到的输出是:
Original Data: UM 832.0.N Match: UM
Original Data: UM 832.0.N Match:
Original Data: UM 832.0.N Match: 832.0
Original Data: UM 832.0.N Match: .
Original Data: UM 832.0.N Match:
Original Data: UM 832.0.N Match:
Original Data: UM 832.0.N Match:
Original Data: UM 832.0.N Match:
我使用的代码非常简单 vb.net:
Private Sub DebugParse(Data As String)
Dim strRegex As String = "(?<GroupA>^[a-zA-Z]*)|(?<GroupB>\d*[\.]*\d*)"
Dim myRegexOptions As RegexOptions = RegexOptions.IgnoreCase Or RegexOptions.Multiline Or RegexOptions.IgnorePatternWhitespace
Dim myRegex As New Regex(strRegex, myRegexOptions)
Dim strTargetString As String = "UM 832.0.N"
For Each myMatch As Match In myRegex.Matches(strTargetString)
If myMatch.Success Then
Debug.WriteLine("Original Data: " & Data & " Match: " & myMatch.Value)
End If
Next
End Sub
我很确定这是我忽略的简单事情,例如标志或对正则表达式的误解,但此时我遇到了挫折障碍。
编辑 好吧,在这里重新阅读我的问题后,我意识到我的部分挫败感是空匹配。我仍然不确定它们为什么在那里,但我至少可以在代码中跳过它们。那么是什么允许句点(又名小数点)匹配?