catch命令行参数组的正则表达式

时间:2019-03-11 12:20:37

标签: c# regex asp.net-core

如果我正在针对此命令行应用程序使用以下方案,则正在构建...

update DIFFICULTY=1 DESCRIPTION="some long run on description"

我想捕获DIFFICULTY=1,并且想将DESCRIPTION="some long run on description"捕获为两个单独的组,如果最终我在api上添加了更多的内容(可能是另一个DESCRIPTION字段),我将如何使用正则表达式进行操作。套管在左侧没什么大碍。

到目前为止,我已经掌握了这一点,但是它并没有包含全部引用的描述文字,也没有将将来可能出现的其他描述字段分开。

/([A-Z])([\w="])+/g

我正在使用.NET核心正则表达式库将其视为FYI,以防js正则表达式中有任何麻烦。

2 个答案:

答案 0 :(得分:1)

是的,可以使用正则表达式,但是看起来像这样:

(?<=\s)(\w+=(?:"(?:(?<=\\)"|[^"])+"|[\S]+))

(Try it here)

尽管不是所有问题都可以使用正则表达式解决,但我建议您在评论中看到link提供的LocEngineer

答案 1 :(得分:0)

您可以使用条件正则表达式:

\b(?P<key>[A-Z]+)=(")?(?P<value>(?(2)[^"]*|\S+))

请参见a demo on regex101.com


更冗长的意思是:

\b               # a word boundary
(?P<key>[A-Z]+)  # only UPPERCASE letters -> group "key"
=                # =
(")?             # capture quotes if they are present
(?P<value>       # start group "value"
    (?(2)[^"]*   # if quotes were present, match anything up to new quotes
    |            # ... or ...
    \S+)         # anything not a whitespace, 1+ times
)