使用Regex替换C#字符串
我目前有下面的代码,替换字符串中的字符,但我现在需要替换第一个X(在本例中为3)字符内的字符,并保留字符串的其余部分。 在我下面的例子中我有51115但我需要替换前3个字符中的任何5个,我最终应该是61115。
我目前的代码:
value = 51115; oldString = 5; newString = 6; result = Regex.Replace(value.ToString(), oldString, newString, RegexOptions.IgnoreCase);
结果现在是61116.你建议我只查询前x个字符?
谢谢
不是特别花哨,但只给正则表达式它应该替换的数据; 仅发送可能被替换的字符范围。
result = Regex.Replace(value.ToString().Substring(0, x), oldString, newString, RegexOptions.IgnoreCase);
如果您只是替换单个字符,您可以编写代码来自行替换。 它比乱码子串然后更换RegEx更快(如果你正在进行单焦点替换,那么无论如何都是浪费)。
StringBuilder sb = new StringBuilder(oldString.Length); foreach(char c in oldString) { if(c == replaceFrom) { c = replaceTo; } sb.Append(c); } return sb.ToString();
我认为这里提到的逐字符选项可能更清晰,但如果你真的想要一个正则表达式:
string result = ""; int value = 55555; string oldString = "5"; string newString = "6"; var match = new Regex(@"(\d{1,3})(\d+)?").Match(value.ToString()); if (match.Groups.Count > 1) result = match.Groups[1].Value.Replace(oldString, newString) + (match.Groups.Count > 2 ? match.Groups[2].Value : "");
我喜欢RegEx,但在这种情况下我会做一个.Replace
string value; string oldString; string newString; value = "51115"; int iLenToLook; iLenToLook = 3; oldString = "5"; newString = "6"; string result; result = value.Length > iLenToLook ? value.Substring(iLenToLook, value.Length - iLenToLook) :""; result = value.Substring(0, value.Length >= iLenToLook ? iLenToLook : value.Length).Replace(oldString, newString) + result;
编辑我改变它以获得未被替换的部分,以防有不同长度的替换字符串比原始。
每当.NET世界中的某个人对正则表达式有疑问时,我都会推荐Expresso( 链接 )。 它是一个很好的工具,适用于正则表达式的混乱和棘手的世界。