正则表达式分裂表现不尽如人意

时间:2016-04-13 09:20:33

标签: c# regex

我有一个字符串,它是来自csv的一行。该字符串包含许多值,其中一个值的结构如下

  

{X = 4535.12,Y = 4535.12} {X = 12345,Y = 12345}等......

我正在使用Regex来分割这个字符串,但到目前为止还没有成功使用这个模式

Private Sub Form_BeforeUpdate(Cancel As Integer)

    Cancel = YourPermissionDeniedCheckFunction(Me!UserID.Value)

    If Cancel = True Then
        MsgBox "User " & Me!UserName.Value & " has not been granted the required permissions for this task."
    End If

End Sub

我在一个网站上对此进行了测试,它与我想要的确切字符串相匹配,并且在大量数据中没有其他字符串,但是当我使用它进行拆分时,拆分只给出一个值(整个字符串为一个)

我是否缺少/(({X=\d+\.\d+, Y=\d+\.\d+})|({X=\d+, Y=\d+})|({X=\d+\.\d+, Y=\d+})|({X=\d+, Y=\d+\.\d+}))+/g 的某些功能,导致它的行为与标准匹配不同,或者我的模式是不正确的?

C#中的行如此读取

Split

3 个答案:

答案 0 :(得分:2)

首先,您的正则表达式过于复杂,您可以将其简化为:

({X=\d+(?:\.\d+)?, Y=\d+(?:\.\d+)?})

这是最终的C#代码:

string s =  "{X=4535.12, Y=4535.12}{X=12345, Y=12345}";
string regex = @"({X=\d+(?:\.\d+)?, Y=\d+(?:\.\d+)?})";

var matches = Regex.Matches(s, regex);
foreach (Match match in matches)
{
    Console.Out.WriteLine(match.Value);
    // Or whatever you want to do with any couple {X=something, Y=something}
}

答案 1 :(得分:1)

我通过使用此正则表达式字符串

解决了这个问题
((?:{X=\d+(?:\.\d+)?, Y=\d+(?:\.\d+)?})+)

这是@Thomas给出的答案的略微编辑版本,因此我会将他标记为答案,因为它帮助我找到解决方案,他的答案更一般,更有可能帮助其他人解决这个问题

答案 2 :(得分:0)

jQuery(window).scrollTop() => element.css('top')