【发布时间】:2015-02-05 14:38:44
【问题描述】:
我有一些已定义格式的字符串,例如Foo.<Whatever>.$(Something),我想将它们分成几部分,并让每个部分自动分配给一个变量。
我曾经用 C# 类和运算符重载编写了类似于 bash/shell 管道命令选项“
ParseExpression ex = pex("item1") > ".<" > pex("item2") > ">.$(" > pex("item3") > ")";
ParseResult r = new ParseResult(ex, "Foo.<Whatever>.$(Something)");
ParseResult 然后有一个字典,其中键 item1 到 item3 设置为在给定字符串中找到的字符串。方法pex 生成了一些可以与> 运算符一起使用的对象,最终具有构成ParseExpression 的ParseExpressionParts 链。
目前我手头没有代码,在我再次从头开始编写代码之前,我想我最好问问是否有人已经完成并发布了它。
【问题讨论】:
-
这应该可以通过一个简单的正则表达式来实现,类似于
^(\w+)\.<(\w+)>\.\$\((\w+)\)$,它将产生 Foo、Whatever 和 Something 作为组 1、2 和 3。不需要解析器。 -
是否有一些漂亮的库可以更容易地构造正则表达式,形式如下:
Regex r = RegexBuilder.AnyChar().FollowedBy('<').AnyChar().FollowedBy('>')...? -
我建议“咬紧牙关”并学习正则表达式语法。是的,它是一种非常晦涩的语言,但是(与其他晦涩的语言相反)它非常有用并且(或多或少)标准化。从长远来看,这是一项一次性投资。
标签: c# string parsing pattern-matching