C# 正则表达式删除C中的转义字符(特定字符)#

C# 正则表达式删除C中的转义字符(特定字符)#,c#,sql-server,regex,sqlcommand,C#,Sql Server,Regex,Sqlcommand,下面的正则表达式不是我真正需要的: Regex.Replace(value.ToString(), "[^0-9a-zA-Z]+", "") 我需要从字符串中删除转义字符,因为我正在创建一个带有字符串的SQL,当我有此字符”或此\r\n等时。我的SQL生成错误,在这种情况下我不能使用:SqlParameter,因为我在字符串中只有一个SQL列表,但我可以删除我不想要的字符 所以,我只需要删除这些字符: 按要求添加我的代码: private static string ConvertWhethe

下面的正则表达式不是我真正需要的:

Regex.Replace(value.ToString(), "[^0-9a-zA-Z]+", "")
我需要从字符串中删除转义字符,因为我正在创建一个带有字符串的SQL,当我有此字符
或此
\r\n
等时。我的SQL生成错误,在这种情况下我不能使用:SqlParameter,因为我在字符串中只有一个SQL列表,但我可以删除我不想要的字符

所以,我只需要删除这些字符:

按要求添加我的代码:

private static string ConvertWhetherUsesComas(object value)
{
    // formats with comas or not
    if (value is String)
    {
        // fix problem with break characters such as \/`'
        value = String.Format("'{0}'", Regex.Replace(value.ToString(), "[^0-9a-zA-Z]+", ""));
    }
    else if (value is DateTime)
    {
        value = String.Format("'{0}'", value.SafeToDateTime(null).Value.ToString("yyyy-MM-dd hh:mm:ss tt"));
    }
    else if (value == null)
    {
        value = "NULL";
    }
    else if (value is Boolean)
    {
        value = value.SafeToBool(false) == false ? 0 : 1;
    }
    return value.ToString();
}
private static List<String> ConvertDiferencesToSql<T>(Differences<T> differences, string tableName, string primaryKey) where T : IHasId<int>
{
    var result = new List<String>();

    differences.New.ToList().ForEach(newItem =>
    {
        var fieldNames = new StringBuilder();
        var fieldValues = new StringBuilder();
        var properties = newItem.GetType().GetProperties().ToList();
        properties.ForEach(f =>
        {
            var propertyName = f.Name.ToUpper() == "ID" ? primaryKey : f.Name;
            var propertyValue = ConvertWhetherUsesComas(f.GetValue(newItem));

            if (propertyValue == "NULL") return; // ignores null values
            fieldNames.AppendFormat("{0},", propertyName);
            fieldValues.AppendFormat("{0},", propertyValue);
        });
        var sqlFields = fieldNames.ToString(0, fieldNames.Length - 1);
        var sqlValues = fieldValues.ToString(0, fieldValues.Length - 1);

        result.Add(String.Format("INSERT INTO {0} ({1}) VALUES ({2});", tableName, sqlFields, sqlValues));
    });

    differences.Changed.ForEach(changedRecord =>
    {
        var fields = new StringBuilder();

        changedRecord.ChangedFields.ForEach(changedField =>
        {
            var propertyName = changedField.Property == "ID" ? primaryKey : changedField.Property;
            var propertyValue = ConvertWhetherUsesComas(changedField.NewValue);

            fields.AppendFormat("{0}={1},", propertyName, propertyValue);
        });

        var sqlFields = fields.ToString(0, fields.Length - 1);

        result.Add(String.Format("UPDATE {0} SET {1} WHERE {2}={3};", tableName, sqlFields, primaryKey, changedRecord.Id)); 
    });

    differences.Deleted.ForEach(deletedItem => result.Add(String.Format("DELETE FROM {0} WHERE {1}={2};", tableName, primaryKey, deletedItem.GetId())));

    return result;
}
私有静态字符串转换器WhetherUseSComas(对象值)
{
//是否使用comas格式
if(值为字符串)
{
//修复诸如\/`'等中断字符的问题
value=String.Format(“{0}”,Regex.Replace(value.ToString(),“[^0-9a-zA-Z]+”,”);
}
else if(值为DateTime)
{
value=String.Format(“{0}”,value.SafeToDateTime(null.value.ToString(“yyyy-MM-dd-hh:MM:ss-tt”);
}
else if(值==null)
{
value=“NULL”;
}
else if(值为布尔值)
{
value=value.SafeTool(false)==false?0:1;
}
返回值.ToString();
}
私有静态列表ConvertDifferencesSQL(差异、字符串表名、字符串主键),其中T:IHasId
{
var result=新列表();
differences.New.ToList().ForEach(newItem=>
{
var fieldNames=新的StringBuilder();
var fieldValues=新的StringBuilder();
var properties=newItem.GetType().GetProperties().ToList();
properties.ForEach(f=>
{
var propertyName=f.Name.ToUpper()=“ID”?primaryKey:f.Name;
var propertyValue=ConvertWhetherUsesComas(f.GetValue(newItem));
if(propertyValue==“NULL”)返回;//忽略NULL值
AppendFormat(“{0},”,propertyName);
AppendFormat(“{0},”,propertyValue);
});
var sqlFields=fieldNames.ToString(0,fieldNames.Length-1);
var sqlValues=fieldValues.ToString(0,fieldValues.Length-1);
Add(String.Format(“插入到{0}({1})值({2});”,tableName,sqlFields,sqlValues));
});
差异.Changed.ForEach(changedRecord=>
{
变量字段=新的StringBuilder();
changedRecord.ChangedFields.ForEach(changedField=>
{
var propertyName=changedField.Property==“ID”?主键:changedField.Property;
var propertyValue=ConvertWhetherUsesComas(changedField.NewValue);
AppendFormat(“{0}={1},”,propertyName,propertyValue);
});
var sqlFields=fields.ToString(0,fields.Length-1);
Add(String.Format(“更新{0}集{1},其中{2}={3};”,tableName,sqlFields,primaryKey,changedRecord.Id));
});
differences.Deleted.ForEach(deletedItem=>result.Add(String.Format(“从{0}删除,其中{1}={2};”),tableName,primaryKey,deletedItem.GetId());
返回结果;
}

如果我理解正确,您希望这样:

Regex.Replace(value.ToString(), "(\\\\n|\\\\r|'|\\/\\\\)+", "")

请参阅。

您可以将这些字符放入字符类中,并替换为
字符串。空的

var rgx4 = new Regex(@"[\r\n'/\\]");
var tst = "\r \n ' /\\";
tst = rgx4.Replace(tst, string.Empty);
结果:


字符类的执行速度通常更快,因为使用替代列表时,有很多回溯会影响性能。

处理这种情况。你能不能也展示一下你的sql和c部分?我的应用程序是一个从MSAccess到SqlServer的复制软件,它太复杂了,以至于我创建了太多的类,以至于我构建了一个包含所有插入、更新和删除的列表,所以我不能使用以前构建的SqlParameters。。。Sql很简单,比如“插入到表中(字段1,…通过加载实体的属性来动态)…但是我在帖子中添加了代码,让您可以看到它…@SonerGönülh如何添加这个字符-在这个正则表达式中?[^0-9a-zA-Z]+我想把这个字符包括在我或你的正则表达式中?在你的正则表达式中,它已经存在了。求反的集合不包含
-
。在我的正则表达式中:
regex.Replace(value.ToString(),“(\\\\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \ \ \ \ \ \ \-)+,”,“),”)
是的,但。
var rgx4 = new Regex(@"[\r\n'/\\]");
var tst = "\r \n ' /\\";
tst = rgx4.Replace(tst, string.Empty);