我有下一个命令行选项,我需要以名称 - 值格式分割:
-table tab -delimiter "," -limit:10
正则表达式构造是:
(?<=[-{1,2}|/])(?<name>[a-zA-Z0-9_]*)[ |:|"]*(?<value>[0-9A-Za-z.?=&\|+ :'*(),\\]*)(?=[ |"]|$)
我的问题在于分隔符选项,当我放置-delimiter "|"
或-delimiter ":"
时,正如我包含这些字符一样,regexp构造不起作用,在这些情况下:name = delimiter,但value等于空,为什么?
感谢您的帮助。
编辑: 蒂姆和加布,谢谢你的帮助。 有效的最终结构是:
(?<=-{1,2}|/)(?<name>[a-zA-Z0-9_]*)\s*:?\s*"? *(?<value>[0-9A-Za-z.?=&\|+ :'*(),\\]*)(?=[ "]|$)
答案 0 :(得分:2)
你的正则表达式中有一些错误:
[ |:|"]*
匹配以下零个或多个字符:空格,|
,:
或"
。您似乎正在使用它来识别name
和value
之间的可能分隔符。
当然,在-delimiter "|"
或-delimiter ":"
中,它会匹配delimiter
之后的所有字符,而不会为value
部分留下任何内容。由于这是可选的,因此正则表达式成功匹配而不填充value
部分。
另一件事:
你可能不想要
(?<=[-{1,2}|/])
而是
(?<=-{1,2}|/)
您似乎应该阅读character classes。
要修复正则表达式,我们需要知道您尝试实施的规则。究竟什么可以分隔名称/值对?
答案 1 :(得分:1)
您的问题出现在[ |:|"]*
- 看起来好像您认为|
在括号内表示“或”,即使您明显不在下一组括号中使用它。
您可能只想[ :"]*
,这会使"|"
正常工作。不幸的是,该组匹配任意数量的可以是空格,冒号或引号的字符,这意味着":"
被认为是名称和值之间的空格的一部分。您需要更好地定义名称和值之间允许的字符集。
我建议:\s*:?\s*"?
(任意数量的空格,后跟可选冒号,后跟任意数量的空格,后跟可选引号)。