使用Regex替换C#字符串

时间:2009-01-29 00:38:49

标签: c# string

我目前有以下代码,要替换字符串中的字符,但我现在需要替换第一个X(在本例中为3)字符内的字符,并保留字符串的其余部分。在我下面的例子中,我有51115,但我需要在前3个字符中替换任何5个,最后我应该以61115结束。

我目前的代码:

value = 51115;
oldString = 5;
newString = 6;

result = Regex.Replace(value.ToString(), oldString, newString, RegexOptions.IgnoreCase);

结果现在是61116.你建议我只查询前x个字符?

由于

5 个答案:

答案 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)。它是在正则表达式的混乱和棘手世界中工作的一个很好的工具。