需要一些正则表达式的帮助

时间:2014-10-01 10:43:26

标签: c# regex

所以我有输入和正则表达式的字符串

string regs = "CREATE PROCEDURE TTTTT.TTTTTTTTT @idVal INT = null, @idVal2 INT, @DecimalVal Decimal(20,2) = null, @NumberVal Numeric(20) = null, @StringVal VarChar(80) = NULL AS";
var result = Regex.Matches(regs, @"\s*(?<parameterdeclaration>@.*?)\s*(.*?=.*?)\s*(,|\bAS\b)", RegexOptions.IgnoreCase);

我希望按如下方式在数组中拆分:

@idVal INT = null, 
@idVal2 INT, 
@DecimalVal Decimal(20,2) = null, 
@NumberVal Numeric(20) = null, 
@StringVal VarChar(80) = NULL AS

我有这个正则表达式:

@"\s*(?<parameterdeclaration>@.*?)\s*([^(\d,\d)],|\bAS\b)"

可以正常工作,但我也想查看等号'='

现在我有了这个:

@"\s*(?<parameterdeclaration>@.*?)\s*(.*?=.*?)\s*(,|\bAS\b)"

但最终将这两者串在一起:@idVal2 INT, @DecimalVal Decimal(20,2) = null,

是否有人知道如何告诉它首先寻找'=',然后是逗号 AS ,如果没有找到然后去逗号 我不能使用@符号作为结束指示符,因为该名称实际上仍然可以包含@符号

而且我不能说只是等于逗号或者只是逗号,因为那么这个字段将被切断@DecimalVal Decimal(20,

所以我需要它是if equals后跟逗号\ AS else逗号\ AS

4 个答案:

答案 0 :(得分:1)

CREATE PROCEDURE TTTTT\.TTTTTTTTT\s*|,\s+

^(.*?)(?=@)|,\s+

尝试使用\n替换。请参阅演示。

http://regex101.com/r/hS3dT7/7

答案 1 :(得分:1)

使用前瞻来断言匹配的字符后面必须跟有行锚的空格或末尾。

(@.*?)(?:,|AS)(?=\s|$)

DEMO

string regs = "CREATE PROCEDURE TTTTT.TTTTTTTTT @idVal INT = null, @idVal2 INT, @DecimalVal Decimal(20,2) = null, @NumberVal Numeric(20) = null, @StringVal VarChar(80) = NULL AS";
Regex rgx = new Regex(@"(@.*?)(?:,|AS)(?=\s|$)");
foreach (Match m in rgx.Matches(regs))
Console.WriteLine(m.Groups[0].Value);

IDEONE

答案 2 :(得分:0)

string input = "CREATE PROCEDURE TTTTT.TTTTTTTTT @idVal INT = null, @idVal2 INT, @DecimalVal Decimal(20,2) = null, @NumberVal Numeric(20) = null, @StringVal VarChar(80) = NULL AS";

string pattern = "@";
string[] substrings = Regex.Split(input, pattern);
bool skipfirst = false;

foreach (string match in substrings)
{
     if (skipfirst) Console.WriteLine("'@{0}'", match);
     skipfirst = true;
}

答案 3 :(得分:0)

只需做一个嵌套的OR,就像这样:

\s*(?<parameterdeclaration>@[^\s]+)\s*(.+)((=.+)\s*(,|\bAS\b)|,)

我还更改了参数声明以包含完整的变量名称,因为我认为这就是你想要的。