Regex 表名上的正则表达式匹配器

Regex 表名上的正则表达式匹配器,regex,Regex,我编写了这个正则表达式,它允许您匹配表名。问题是它还与表字段AAA_BBB_CCC_DDD匹配 我希望它不匹配SELECT之后的字段表 (^|,?\s*)([A-Z]+(_[A-Z]+){2,})(,?\s*|$) 多谢各位 string request = "ODS_HIST_PS_AF_C_APPTMNT ,(SELECT AF_CONTRACT_ID,MAX(EFFDT) AS EFFDT FROM ODS_HIST_PS_AF_C_APPTMNT GROUP BY AF_CONTRA

我编写了这个正则表达式,它允许您匹配表名。问题是它还与表字段AAA_BBB_CCC_DDD匹配

我希望它不匹配SELECT之后的字段表

(^|,?\s*)([A-Z]+(_[A-Z]+){2,})(,?\s*|$)
多谢各位

string request = "ODS_HIST_PS_AF_C_APPTMNT ,(SELECT AF_CONTRACT_ID,MAX(EFFDT) AS  EFFDT FROM ODS_HIST_PS_AF_C_APPTMNT GROUP BY AF_CONTRACT_ID ) REQ_MAX";

string pattern = @"(^|,?\s*)(?<!(SELECT\s+|BY\s+))([A-Z]+(_[A-Z]+){2,})(,?\s*|$)";

foreach (Match match in Regex.Matches(request, pattern))
{
    s.Add(match.Value);
}
这将返回以下表名:

ODS_HIST_PS_AF_C_APPTMNT=>正常

F_合同\u ID=>无字段

F_合同\u ID,=>无字段

ODS_HIST_PS_AF_C_APPTMNT=>正常

正则表达式:

"(^|,?\s*)(?<!(SELECT\s+|BY\s+))([A-Z]+(_[A-Z]+){2,})(,?\s*|$)"

我发现:

请发布一些你想匹配和不想匹配的示例。例如:AAA_BBB_CCC_DDD=>匹配AAA_BBB_CCC_DDD,AAA_BBB_CCC_DDD=>匹配AAA_BBB_CCC_DDD别名1,AAA_BBB_CCC_DDD别名2,=>匹配选择字段\u名称\u示例,按字段\年份\示例=>与字段\名称\示例和字段\年份\示例的警告匹配,AAA \ BBB \ CCC \ DDD组中的最大值为TOTO。我不想要。请提供更多的上下文。实际数据也会有帮助。请编辑您的问题并添加这些示例。我试图编辑您的问题以提高其含义。如果我错过了你的意思,请随意再编辑一遍,但这次请注意语法和打字错误。此外,人们可能需要您提供更多信息,以便理解您的问题。这意味着你应该用这些额外的信息编辑你的问题,而不是在这里传递新的评论。您的代码属于您的问题,它们毕竟不是注释。欢迎来到社区;