自定义解析字符串

nic*_*cks 5 c# string split string-parsing

在解析FTX(自由文本)字符串时,我需要使用+分隔符将其拆分,但只有在它没有转义字符(例如,?)之前.所以这个字符串nika ?+ marry = love+sandra ?+ alex = love应解析为两个字符串:nika + marry = lovesandra + alex = love.使用String.Split('+')显然是不够的.我可以以某种方式实现吗?

在我看来,一种方法是?+用一些独特的字符(或一连串的字符)来代替,例如,@#@使用"+"作为分隔符拆分然后替换@#@回来+,但这在任何可能的情况下都是不可靠和错误的我能想到的方式.

?仅作为转义字符使用,:或者+在任何其他情况下,它被视为常规字符.

xan*_*tos 3

一个可怕的正则表达式来分割它:

string str = "nika ?+ marry = love??+sandra ???+ alex = love";
string[] splitted = Regex.Split(str, @"(?<=(?:^|[^?])(?:\?\?)*)\+");
Run Code Online (Sandbox Code Playgroud)

它在 + ( \+) 上进行分割,+ ( ) 前面是字符串的开头 ( ^) 或非?字符 ( [^?]) 加上偶数个?( (?:\?\?)*)。(?:)(非捕获组)的使用很自由,因为Regex.Split如果有多个捕获组会做有趣的事情。

请注意,我没有进行 unescape!所以最后?+还是?+