C# 正则表达式捕获括号外的所有字符

C# 正则表达式捕获括号外的所有字符,c#,regex,string,C#,Regex,String,我试图拆分一个SQL查询脚本,在create表上,我只希望内容位于最外面的括号内,而忽略其中的任何括号,这些括号主要描述列类型的最大字符数 以下是我的查询示例: 创建不存在的表%SCHEMA%.business( id UUID不为空, 名称VARCHAR(50)不为空, DBA VARCHAR(50岁), isactive BOOL NOT NULL默认值为TRUE, isdeleted布尔值不为NULL默认值为FALSE, 不带时区的createdon时间戳(6)不为空 ) 带(OID=假)

我试图拆分一个SQL查询脚本,在create表上,我只希望内容位于最外面的括号内,而忽略其中的任何括号,这些括号主要描述列类型的最大字符数

以下是我的查询示例:

创建不存在的表%SCHEMA%.business(
id UUID不为空,
名称VARCHAR(50)不为空,
DBA VARCHAR(50岁),
isactive BOOL NOT NULL默认值为TRUE,
isdeleted布尔值不为NULL默认值为FALSE,
不带时区的createdon时间戳(6)不为空
)
带(OID=假)
我想找回里面描述专栏的所有内容。我试过这些

\(([^\)]*)\) 
在第一个(50)处停止, 读取另一个(50)和(6),但不读取任何其他内容,并且不会到达外括号的末尾

\((\d+)\)
这将只读取内圆括号,这在以后可能会很有用,但我只返回两(50)和(6)


哪个正则表达式将捕获该括号内的所有内容?即使它捕获了更多的字符串,我也可以在以后通过代码删除多余的字符串。

.NET正则表达式有所谓的。这将确保起始分隔符后面紧跟着结束分隔符(由您选择)。如果这些不平衡,它将在字符串中的该点停止匹配

这就是使用正则表达式实现这一点的方法,但其他替代方法不易破坏,可能更适合此任务

要删除后一个结果,可以使用以下命令(确保
后面不跟
WITH

(?\)+(?(B)(?!)(?=\))

这个?太快了!代码运行它!现在要贪婪了。是否有一种方法也可以省略“OID=False”?不管怎样,把它作为答案贴出来,这样我就可以把它标记为正确的!如果您需要更健壮的东西,您可以考虑使用Script PtPt来解析SQL并从中收集您想要的信息。我愿意接受所有建议,但是,除了下载文件之外,您是否可以提供页面链接或提供示例?@as.beulieu:当然:非常好!正确的答案,我也很欣赏正则表达式本身的解释,以便更好地理解其他应用程序。@as.beulieu非常欢迎:)我添加了第二个正则表达式以消除第二个结果,尽管可能需要额外的修补才能使它与其他一些字符串正常工作(我想你不止一个)哦,当然。这就完成了繁重的工作,现在我只需要担心一些粗糙的边缘。
(?<=\()(?:[^()]|(?<B>\()|(?<-B>\)))+(?(B)(?!))(?=\))
id UUID NOT NULL,
name VARCHAR(50) NOT NULL,
DBA VARCHAR(50),
isactive BOOL NOT NULL DEFAULT TRUE,
isdeleted BOOL NOT NULL DEFAULT FALSE,
createdon TIMESTAMP(6) WITHOUT TIME ZONE NOT NULL
OIDS = FALSE
(?<=(?<!WITH *)\()(?:[^()]|(?<B>\()|(?<-B>\)))+(?(B)(?!))(?=\))