【发布时间】:2011-11-02 22:09:19
【问题描述】:
我正在解析命令序列字符串,需要将每个字符串转换为字符串[],该字符串将按读取顺序包含命令标记。
原因是这些序列存储在数据库中,以指示协议客户端为各个远程应用程序执行某个规定的序列。这些字符串中有一些特殊的标记,我需要自己添加到 string[] 中,因为它们不代表正在传输的数据;相反,它们表示阻塞暂停。
序列不包含分隔符。在命令序列的任何地方都可以找到任意数量的特殊标记,这就是为什么我不能简单地用正则表达式解析字符串的原因。此外,序列中的所有这些特殊命令都使用${}
下面是我需要解析成token的数据示例(P1表示阻塞暂停一秒):
"some data to transmit${P1}more data here"
结果数组应如下所示:
{ "some data to transmit", "${P1}", "more data here" }
我认为 LINQ 可以帮助解决这个问题,但我不太确定。我能想到的唯一解决方案是遍历每个字符,直到找到$,然后检测是否有特殊的暂停命令可用,然后使用索引从那里解析序列。
【问题讨论】:
-
我不明白你为什么不能使用
Regex.Split-- 你能详细解释一下吗? -
为什么不使用一组分隔符?这将使这个问题变得微不足道。
-
您或多或少准确地描述了lexer。应该有大量关于词法分析器如何工作的信息,而且它们实施起来相对简单。
-
@Gabe,因为我没有分隔符。
-
@Tejs,因为命令字符串是多个应用程序之间共享的数据,无法更改以适合我正在编写的一个应用程序。