【问题标题】:Regex match multiple parameters separated by comma in command line正则表达式匹配命令行中以逗号分隔的多个参数
【发布时间】:2020-05-24 04:57:15
【问题描述】:

我正在使用 C# 正则表达式来实现以下结果。

command value1 valu2 : param1=value1, param2=[valu2], param3 = vaule3 /option1 |option2

Group1: param1=value1
Group2: param2=[valu2]
Group3: param3 = vaule3

我当前的正则表达式:

(\w+\s*\=\s*\w+)(,\w+\s*\=\s*[a-zA-Z0-9\]\[]+)*

我缺少以下内容:

  1. 应以:
  2. 开头
  3. 应该允许 [] 字符进入值部分
  4. 应该停在 / 或 |或行尾

这里是测试测试:https://regex101.com/r/5kPXAz/1

我使用了以下示例:

【问题讨论】:

标签: c# regex


【解决方案1】:

您尝试的模式不匹配所有值,因为使用字符类匹配方括号只会在首先匹配逗号后出现在模式的第二部分。

您可以使用交替匹配被方括号括起来的单词字符或仅匹配单词字符,并使用正向前瞻来断言 /, 或行尾。

\w+\s*=\s*(?:\[\w+\]|\w+)(?=\s*[,/]|$)

解释

  • \w+\s*=\s*匹配 1+ 个单词字符和可选空白字符之间的等号
  • (?:非捕获组
    • \[\w+\] 匹配 [ 1+ 个单词字符和 ]
    • |或者
    • \w+ 匹配 1+ 个单词字符
  • )关闭群
  • (?=\s*[,/]|$) 正向前瞻,断言右边是 ,/ 或行尾

.NET regex demo

【讨论】:

  • 您好,感谢您的回答。几点:它与开始不匹配:我应该在初始步骤中更好地做到这一点吗?它也不会在 /| 处停止。尝试匹配:命令 value1 value2 : param1=value1, param2=[valu2], param3 = vaule3 /option1 /option2 |ShouldNotMatchParam=FaultyValue2
  • @Salim 你是这个意思吗? (?: : |\G(?!^)(?:\s*,\s*)?)(\w+\s*=\s*(?:\[\w+\]|\w+)) regex101.com/r/kSFJ91/1 或排除 /| 在后面的 (?<![/|])\b\w+\s*=\s*(?:\[\w+\]|\w+)(?=\s*[,/]|$) regex101.com/r/DBtyio/1
猜你喜欢
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多