我正在尝试创建一个模式,使我能够在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
其中一个分组应该被忽略,但是大括号的其他分组不是。导致收集脏。
我很欣赏第二双眼睛。
答案 0 :(得分:0)
模式,(?![^{]*\})
似乎对我有用,只要文本中没有丢失{
或}
。
细分,评估为
, zero-width negative lookahead Any character not in "{" * (zero or more times) } End Capture
如果需要,您可以使用*,(?![^{]*\}) *
在逗号前后修剪空格。
在测试字符串上,它会产生以下分割:
然而,它将无法正确分割像
这样的字符串Apple,Ban} ana,Carrot {1,2,3},Frog,Cat,1,2,3
由于" banana"
中丢失了}