C# 如何替换字符串中的未知字符?通配符?

C# 如何替换字符串中的未知字符?通配符?,c#,regex,string,replace,C#,Regex,String,Replace,我有一根绳子。。比如说: string MyString = "SELECT Stuff FROM Table WHERE Code = "Foo" AND DATE=20120101"; 我想将20120101替换为?。但是,我搜索的20101字符串并不总是相同的。它将始终以2开头,并且始终包含8个字符。可能是20121225、20130510等 我可以用通配符吗?例如: string Fixed = MyString.Replace("2*******", "?"); 我想要的是这个结果

我有一根绳子。。比如说:

string MyString = "SELECT Stuff FROM Table WHERE Code = "Foo" AND DATE=20120101";
我想将
20120101
替换为
。但是,我搜索的
20101
字符串并不总是相同的。它将始终以
2
开头,并且始终包含8个字符。可能是20121225、20130510等

我可以用通配符吗?例如:

string Fixed = MyString.Replace("2*******", "?");
我想要的是这个结果:

MyString = "SELECT Stuff FROM Table WHERE Code = "Foo" AND DATE=?";
您可以使用正则表达式:

Regex.Replace(input,@"DATE=""\d*""", "?");
但是,如果这是一个SQL查询,最好使用参数化查询来避免SQL注入攻击等。这是做这类事情的行业标准方法。

您可以使用正则表达式:

Regex.Replace(input,@"DATE=""\d*""", "?");

但是,如果这是一个SQL查询,最好使用参数化查询来避免SQL注入攻击等。这是做这类事情的行业标准方法。

您可以使用Regex replace方法:

    string oldstring = "20120101";
    string newstring = Regex.Replace(oldstring, @"^2[0-9]{7}", "?");

您可以使用Regex replace方法:

    string oldstring = "20120101";
    string newstring = Regex.Replace(oldstring, @"^2[0-9]{7}", "?");

这就是你要找的吗

string MyString=“从表中选择代码={0}和日期={1}的内容”

这将允许您将相同的字符串用于{0}和{1}中所需的任何内容,例如:

String.Format(MyString、codeString、dateString)


您可以将查询字符串与您想要的任何参数一起重用。

那么这就是您想要的吗

string Fixed = Regex.Replace( MyString, @"DATE=2\d{7}", "DATE=?" ); 
string MyString=“从表中选择代码={0}和日期={1}的内容”

这将允许您将相同的字符串用于{0}和{1}中所需的任何内容,例如:

String.Format(MyString、codeString、dateString)

您可以将查询字符串与所需的任何参数一起重用

string Fixed = Regex.Replace( MyString, @"DATE=2\d{7}", "DATE=?" ); 
或者,用积极的眼光看后面

 Replace( MyString, @"(?<=DATE=)2\d{7}", "?" ); 
Replace(MyString,@)(?
或者,用积极的眼光看后面

 Replace( MyString, @"(?<=DATE=)2\d{7}", "?" ); 


Replace(MyString,@”(?你能解决更接近原因的问题吗?这个字符串从哪里来的?字符串是一个SQL查询,从MS Access剪切并粘贴到文本框中。我需要将日期替换为?以便使用参数化查询。我还有其他工作要做,将格式从SQL转换为DB2(例如,用%替换*请在请求的替换后以您希望的形式显示
MyString
。我只是重新阅读了您的问题…您只需要执行
MyString.replace(“[0-9]{8},”?”)
。这将用单个的
替换每个6位数的实例?
。如果您想智能地筛选日期:
[12][089][0-9][0-9][01][012][0-3][0-9]
。您是否使用第二条注释中的正则表达式?第一个示例将匹配任意8个连续数字,并将其替换为
。第二个正则表达式与YYMMDD的顺序有关,因为它不允许在每个位置使用不合逻辑的数字。不幸的是,我为您做了一件有点草率的工作:(.改为试试这个:
MyString.Replace(“[12][089][0-9][0-9][01][0-9][0-3][0-9]”,“?”)
。错误是,它只允许使用之前的01、02、10、11、12个月。如果你想要一个真正强大的解决方案,你也可以使用正则表达式替代方案,但我不知道它们是否在C#中得到支持?你能更接近原因地解决问题吗?你从哪里得到这个字符串?字符串是一个剪切和粘贴的SQL查询从MS Access转换为文本框。我需要将日期替换为?以便使用参数化查询。我还有其他工作要做,以便将格式从SQL转换为DB2(例如,将*替换为%)请在请求的替换后以您希望的形式显示
MyString
。我只是重新阅读了您的问题…您只需要执行
MyString.Replace(“[0-9]{8},”?”)
。这将用单个
替换每个6位数字的实例。如果您想智能地筛选日期:
[12][089][0-9][0-9][01][012][0-3][0-9]
您是否使用第二条注释中的正则表达式?第一个示例将匹配任意8个连续数字,并将其替换为
。第二个正则表达式与YYYYMMDD的顺序有关,因为它不允许在每个位置使用不合逻辑的数字。不幸的是,我为您做了一件有点草率的工作:(.改为试试这个:
MyString.Replace(“[12][089][0-9][0-9][01][0-9][0-3][0-9]”,“?”)
。错误是它只允许使用之前的01、02、10、11、12个月。如果你想要一个真正强大的解决方案,你也可以使用regex替代方案,但我不知道它们是否在C#中得到支持?他不想用?替换所有数字,只想用其中的一部分。@BaileyS
我想用?
替换20101。我相信他想这么做用?替换整个字符串,这就是要做的。对不起,我澄清了我原来的问题。20120101将始终以2开头,长度始终为8个字符。他不想用?替换所有数字,只想替换其中一些。@BaileyS
我想用?
替换20120101。我相信他想替换e整个字符串都是带?的,这就是它要做的。对不起,我澄清了我原来的问题。20120101总是以2开头,长度总是8个字符。你不需要使用
^
。这不会替换所需的字符串你不需要使用
^
。这不会替换所需的字符串这就是我想要做的,怎么做用户输入从Access复制和粘贴的SQL查询字符串。我想通过编程将其查询字符串转换为参数化字符串。这很有意义。请记住,如果不使用“?”替换节,可以使用{0},{n}替换节。然后该字符串将已经是可以用string.format填充的参数化格式。我将查看string.format..我一直在使用Parameters.AddWithValue。这就是我要做的,但是用户输入一个SQL查询字符串