如何修复正则表达式的模式以匹配大小

问题描述 投票:0回答:1

我正在使用这个模式 var pattern = @"[([^]]+)] [?([^(]]+)(?:(((\w\s)+)))?]?. ?(?:\sNOT\s*NULL)?(?:,|$)";

这是我的代码 var matches = Regex.Matches(command, pattern, RegexOptions.IgnoreCase);

            foreach (Match match in matches)
            {
                var fieldName = match.Groups[1].Value.Trim();
                var dataType = match.Groups[2].Value.Trim();
                var sizeStr = match.Groups[3].Value.Trim();

我总是得到 sizeStr 的空值,如何修改我的模式,或者是否有其他方法可以解决这个问题,这是我想要提供的输入示例命令格式:[field1] [dataType1] (20) nullability, [field2] [ dataType2](最大)可为空性,[field3] [dataType3] 为空性

我已经尝试过 chatgpt 和 blackbox ai 都无法解决我的问题,所以我有点陷入困境!

c# regex asp.net-mvc list pattern-matching
1个回答
0
投票

这部分是可选的

(?:\s*NOT\s*NULL)?
并且不在捕获组中,因此如果您想要 3 个捕获组,您可以将模式编写为:

\[([^\]]+)]\s+\[([^(\]]+)](?:\s*\(\s*(\w+(?:\s+\w+)*)\s*\))?

模式匹配:

  • \[([^\]]+)]
    捕获组 1 之间的内容
    [..]
  • \s+\[([^(\]]+)]
    匹配 1 个以上空白字符并捕获组 2 之间的内容
    [..]
  • (?:
    非捕获组
    • \s*
      匹配可选的空白字符
    • \(\s*
      匹配
      (
      和可选的空白字符
    • (\w+(?:\s+\w+)*)
      组 3 中捕获匹配 1+ 个空白字符,并可选择重复 1+ 个空白字符和 1+ 个单词字符
    • \s*\)
      匹配可选空白字符并匹配
      )
  • )?
    关闭非捕获组并将其设为可选

正则表达式演示

由于第 3 组现在是可选的,您可以检查代码中是否存在。

© www.soinside.com 2019 - 2024. All rights reserved.