.Net正则表达式给出的结果与预期不同

时间:2015-10-04 13:30:22

标签: .net regex

我的正则表达式:

(1|0|0[\.,]\d+)\((\d+|\d+[\.,]\d+)\)

我正在尝试解析的字符串:

1(1)0(19)0.5(0.2)0(10)0.3(1,9)

Expected matches:

 Match 1: '1'   '1'   
 Match 2: '0'   '19'   
 Match 3: '0.5' '0.2'   
 Match 4: '0'   '10'   
 Match 5: '0.3' '1.9'

由于某种原因,最后一场比赛是'0.3' '19',除非我使用0.3(1.9)而不是0.3(1,9)。所以我假设有一些东西与','vs'。',但我认为我的正则表达式expr。会解释这个吗?

我使用以下网站将我的字符串与表达式匹配:

http://www.regexr.com/匹配正常 https://regex101.com/r/uE4vU9/3符合罚款 http://regexpal.com/符合罚款 http://regexhero.net/tester/匹配正确

1 个答案:

答案 0 :(得分:0)

所以这是我正在运行的代码:

 Public Function ParsePulseTrain(input As String) As List(Of Pulse)
    Dim _regex As New System.Text.RegularExpressions.Regex("(1|0|0[\.,]\d+)\((\d+|\d+[\.,]\d+)\)")
    Dim pulsetrain As New List(Of Pulse)
    If _regex.IsMatch(input) Then
        Dim matches As System.Text.RegularExpressions.MatchCollection = _regex.Matches(input)
        For Each m As System.Text.RegularExpressions.Match In matches
            pulsetrain.Add(New Pulse(Single.Parse(m.Groups(1).Value, Globalization.CultureInfo.InvariantCulture), Single.Parse(m.Groups(2).Value, Globalization.CultureInfo.InvariantCulture)))
        Next
    End If
    Return pulsetrain
End Function

正如您所看到的,在解析m.groups值时,我使用的是使用'。'的invariantculture信息。小数位数。因此问题。