我正在使用这个模式 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 都无法解决我的问题,所以我有点陷入困境!
这部分是可选的
(?:\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 组现在是可选的,您可以检查代码中是否存在。