【发布时间】:2013-09-07 01:24:42
【问题描述】:
我想拆分以下字符串
// Comments
KeyA : SomeType { SubKey : SubValue } KeyB:'This\'s a string'
KeyC : [ 1 2 3 ] // array value
进入
KeyA
:
SomeType
{ SubKey : SubValue }
KeyB
:
This's a string
KeyC
:
[ 1 2 3 ]
(: 和空格是分隔符,尽管 : 保留在结果中;cmets 被忽略;{}、[] 或 '' 之间没有分隔符)
我可以使用 Regex Split 或 Match 来实现吗?如果是这样,正确的模式是什么?对模式字符串的评论将不胜感激。
此外,如果输入字符串无效,也希望抛出异常或返回错误消息(请参阅下面的注释)。
谢谢。
【问题讨论】:
-
输入
"A{B[C}D]"会发生什么?给"A'B{C'"?给"A{B{C}D}E"? -
对于第一个,它应该返回一个错误(最好带有一些用于调试的上下文)。对于第二个,它应该返回 A , {B{C}D} , E
-
您是否有理由将其强制为正则表达式?这将更容易(非常!)编写为递归下降解析器。
-
我最初认为可以通过不那么复杂的正则表达式模式来实现。但是,我已经按照您的建议实现了自定义 Lexer。
标签: c# .net regex tokenize lexer