我目前有以下代码,要替换字符串中的字符,但我现在需要替换第一个X(在本例中为3)字符内的字符,并保留字符串的其余部分。在我下面的例子中,我有51115,但我需要在前3个字符中替换任何5个,最后我应该以61115结束。
我目前的代码:
value = 51115;
oldString = 5;
newString = 6;
result = Regex.Replace(value.ToString(), oldString, newString, RegexOptions.IgnoreCase);
结果现在是61116.你建议我只查询前x个字符?
由于
答案 0 :(得分:2)
不是特别花哨,但只给正则表达式它应该替换的数据;只发送可能被替换的字符范围。
result = Regex.Replace(value.ToString().Substring(0, x), oldString, newString, RegexOptions.IgnoreCase);
答案 1 :(得分:1)
如果您只是替换单个字符,您可以自己编写代码来进行替换。它比乱码子串然后更换RegEx更快(如果你正在进行单焦点替换,这无论如何都是浪费。)
StringBuilder sb = new StringBuilder(oldString.Length);
foreach(char c in oldString) {
if(c == replaceFrom) { c = replaceTo; }
sb.Append(c);
}
return sb.ToString();
答案 2 :(得分:1)
我认为这里提到的逐字符选项可能更清晰,但如果你真的想要一个正则表达式:
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 : "");
答案 3 :(得分:0)
我喜欢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;
编辑我将其更改为首先获取未替换部分,以防有不同长度的替换字符串而不是原始字符串。
答案 4 :(得分:0)
每当.NET世界中有人对正则表达式有疑问时,我都会推荐Expresso(link)。它是在正则表达式的混乱和棘手世界中工作的一个很好的工具。