C#正则表达式,如果存在某个单词

时间:2017-08-03 10:19:37

标签: c# regex

以下是我的示例代码:

string pattern = "(@param)(?=.*where)";
string updateQuery = @"update Table set column = @param where otherColumn = @param";
string newUpdateQuery = Regex.Replace(updateQuery, pattern , "CONVERT(NVARCHAR,'param')");
Console.WriteLine(newUpdateQuery);
string insertQuery = @"insert into Table (column) values(@param)";
string newInsertQuery =  Regex.Replace(insertQuery, pattern , "CONVERT(NVARCHAR,'param')");
Console.WriteLine(newInsertQuery);

输出:

update Table set column = CONVERT(NVARCHAR,'param') where otherColumn = @param  
insert into Table (column) values(@param)  

在条件之前我想要匹配参数 但在插入查询中,此模式无法匹配任何参数 如果加'?'像这样的模式

string pattern = "(@param)(?=.* where)?"

输出将成为

update Table set column = CONVERT(NVARCHAR,'param') where otherColumn = CONVERT(NVARCHAR,'param')
insert into Table (column) values(CONVERT(NVARCHAR,'param'))

这个输出是我想要的:

update Table set column = CONVERT(NVARCHAR, 'param') where otherColumn = @param
insert into Table(column) values(CONVERT(NVARCHAR, 'param'))

如果查询具有where条件 只在“where”

之前匹配param

1 个答案:

答案 0 :(得分:4)

如果前面没有@param,您需要确保只匹配where

string pattern = @"(?<!\bwhere\b.*)@param";

请参阅C# demo

模式详情

  • (?<!\bwhere\b.*) - 如果有一个完整的单词where\b是单词边界),那么会导致匹配失败的负面反馈,并且会再次显示除换行符之外的任何0 +字符。当前位置的左侧
  • @param - 一个文字子字符串(如果需要,在末尾添加\b以匹配整个单词)。

完整的C#测试:

string pattern = @"(?<!\bwhere\b.*)@param";
string updateQuery = @"update Table set column = @param where otherColumn = @param";
string newUpdateQuery = Regex.Replace(updateQuery, pattern , "CONVERT(NVARCHAR,'param')");
Console.WriteLine(newUpdateQuery); // => update Table set column = CONVERT(NVARCHAR,'param') where otherColumn = @param
string insertQuery = @"insert into Table (column) values(@param)";
string newInsertQuery =  Regex.Replace(insertQuery, pattern , "CONVERT(NVARCHAR,'param')");
Console.WriteLine(newInsertQuery); // => insert into Table (column) values(CONVERT(NVARCHAR,'param'))