我有一些数据的变化如下列表,我一直在试图找出一个正则表达式能够将所有这些数据分成两组。 A组应该是UM和B组应该是或832.0如果小数和任何数字应遵循。例如,如果它是UM832.56.NI只想获得组B的832.56。组A总是字母,并且应该始终启动字符串,但正如您所看到的那样,它们末尾有一个字母。如果我能想出一些适合除了那个之外的所有东西,我会很乐意为那个问题抛出一个错误。正则表达式帮助多种格式的数据需要
- UM 832.0.N
- UM 832.0
- UM 832.N
- UM 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
我敢肯定这是一些简单的我正在俯视,就像一面旗帜或对正则表达式的误解,但在这一点上我已经遇到了挫折的障碍。
编辑 好了,所以之后重新阅读在这里我的问题,我意识到我无奈的那部分是空的匹配。我仍不确定他们为什么在那里,但我至少可以跳过他们的代码。那么什么是允许期间(又名小数点)是一个匹配?
这似乎已经完成了这项工作。谢谢。 –