用单引号括起特定单词

时间:2011-10-31 09:49:19

标签: c# .net regex

我正在使用简单的解决方案来引用带引号的字符串中的文本。

例如:

DATEDIFF(Minutes, Lead.WhenCreated, @Today)

需要更新到

DATEDIFF(Minutes, Lead.WhenCreated, '@Today')

如果源字符串已经包含令牌的引号,则不应进行任何更改。字符串中可能有多个标记,我不知道标记值是什么 - 只是说它将以@字符开头。

我的环境是Visual Studio C#2008。

希望有些人可以提供帮助。

感谢。

3 个答案:

答案 0 :(得分:1)

resultString = Regex.Replace(subjectString, @"(@\b\w+\b)", "'$1'");

你可以使用这个。它会找到所有以@开头的单词,并为它们添加引号。

编辑:

resultString = Regex.Replace(subjectString, @"((?<!')@\b\w+\b)", "'$1'");

考虑已经引用过的字符串。

答案 1 :(得分:0)

看起来你正在用C#代码构建一个SQL语句,然后自己替换参数。你可能最好使用这种方法...

DataReader rdr;
using (SqlConnection con = new SqlConnection(MY_CONNECTIONSTRING)
{
    con.Open();
    string sql = "SELECT DATEDIFF(Minutes, Lead.WhenCreated, @Today) FROM tbl";
    using (SqlCommand cmd = new SqlCommand(sql, con))
    {
         cmd.Parameters.AddWithValue("@Today", datDateValue);
         rdr = cmd.ExecuteReader();
    }
}

此方法更安全,可防止恶意SQL注入。

This is an article addressing the issue in C#

答案 2 :(得分:0)

模式:

(?<!')(@\w+)

的更换:

'$1'