C#Regex Parse Arguments / Identifiers

时间:2013-07-03 22:11:00

标签: c# regex parsing command-line command

我目前正在考虑实现某种命令管理系统,没有什么大的,只是为了好玩的目的(例如,IRC Bot,......)

我在C#中做得很好,并且所有逻辑都或多或少地设置了,但由于我是RegEx方面的菜鸟,我找不到解析所有参数和标识符的好方法。我确实想象过像“parameter parameter1'parameter2 with space'parameter3”。这是我的“概念”,在我看来,使用字符串方法“拆分,替换,子串,......”并不是一个好的解决方案,但RegEx可以完成这项工作。

所以,长话短说:RegEx甚至可以实现这一点吗?如何使用RegEx正确解析?在如何处理参数方面是否有更好的解决方案?

我想为每个命令创建一个“模式”,然后让解析器收集所有字符串。在这种情况下,用户不需要使用“”来指定参数,但我认为RegEx将是更好的解决方案......

那就是它,希望得到帮助:)

1 个答案:

答案 0 :(得分:0)

看看这个正则表达式对你有帮助:

var matches = Regex.Matches(inputStr, @"'[^']*'|\S+");

如果你运行它输入:“identifier parameter1'parameter2 with space'parameter3”那么你将获得一个包含4个元素的集合:

identifier
parameter1
'parameter2 with space'
parameter3

修改

我制作了一个改编的版本:   - 支持''作为'的转义,当在带有空格的参数中

var matches =
    Regex.Matches("identifier parameter1 'parameter2 with ''space''' parameter3",
        @"'(?:[^']|'')*'|\S+")
        .Cast<Match>()
        .Select(m => m.Value)
        .Select(s => s.StartsWith("'") && s.Length >= 2 ?
            s.Substring(1, s.Length - 2).Replace("''", "'") : s)
        .ToArray();