正则表达式字符串拆分

时间:2017-10-20 16:36:03

标签: regex vb.net

我正在尝试创建一个模式,使我能够在comas上拆分字符串但忽略大括号内的表达式。

如果字符串中只存在一组花括号表达式,那么我现有的代码效果很好。

Dim expression As New Regex(",(?=(?:[^\{]*\{[^\{]*\})*(?![^\}]*\}))")

        Try
            parts = expression.Split(sortString)
            For Each Item In parts
                If Not Item Is Nothing Then
                    result.Add(Item)
                End If
            Next

            Return result

如果我传递字符串

{IIF(Hemo.Site = "LV",1,IIF(Hemo.Site = "SVC",2,IIF(Hemo_Pressures.Site = "AO",3,4)))},Site DESC,Pressure1 ASC

它有效,大括号分组被忽略,后面的每个字符串都被分开了。

问题是。如果我需要在我的字符串中容纳多个花括号表达式分组,它就会开始失败。

这失败了:

{IIF(Hemo.Site = "LV",1,IIF(Hemo.Site = "SVC",2,IIF(Hemo_Pressures.Site = "AO",3,4)))},Site DESC,{IIF(Hemo.Site = "LV",1,IIF(Hemo.Site = "SVC",2,IIF(Hemo.Site = "AO",3,4)))}, Pressure1 ASC

其中一个分组应该被忽略,但是大括号的其他分组不是。导致收集脏。

我很欣赏第二双眼睛。

1 个答案:

答案 0 :(得分:0)

模式,(?![^{]*\})似乎对我有用,只要文本中没有丢失{}

细分,评估为

,
zero-width negative lookahead
  Any character not in "{"
  * (zero or more times)
  }
End Capture

如果需要,您可以使用*,(?![^{]*\}) *在逗号前后修剪空格。

在测试字符串上,它会产生以下分割:

  • {IIF(Hemo.Site =" LV",1,IIF(Hemo.Site = " SVC",2,IIF(Hemo_Pressures.Site =" AO",3,4)))}
  • 网站DESC
  • {IIF(Hemo.Site =" LV",1,IIF(Hemo.Site =" SVC",2,IIF(Hemo.Site = " AO",3,4)))}
  • Pressure1 ASC

然而,它将无法正确分割像

这样的字符串
  

Apple,Ban} ana,Carrot {1,2,3},Frog,Cat,1,2,3

由于" banana"

中丢失了}