Замена строки в C # с использованием Regex - PullRequest
0 голосов
/ 29 января 2009

В настоящее время у меня есть код ниже, чтобы заменить символы в строке, но теперь мне нужно заменить символы в первых X (в данном случае 3) символах и оставить оставшуюся часть строки. В моем примере ниже у меня есть 51115, но мне нужно заменить любые 5 в пределах первых 3 символов, и я должен в итоге получить 61115.

Мой текущий код:

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

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

Результат теперь 61116. Что бы вы предложили мне сделать, чтобы запросить только первые x символов?

Спасибо

Ответы [ 5 ]

2 голосов
/ 29 января 2009

Не особенно необычно, но дает регулярное выражение только те данные, которые он должен заменить; отправлять только в диапазоне символов, которые могут быть заменены.

result = Regex.Replace(value.ToString().Substring(0, x), oldString, newString, RegexOptions.IgnoreCase);
1 голос
/ 29 января 2009

Я думаю, что символьный вариант, упомянутый здесь, возможно, более понятен, но если вы действительно хотите регулярное выражение:

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 : "");
1 голос
/ 29 января 2009

Если вы просто заменяете только один символ, вы можете просто написать код, чтобы выполнить замену самостоятельно. Это было бы быстрее, чем возиться с подстрокой, а затем заменить RegEx (что в любом случае является пустой тратой, если вы заменяете один символ).

StringBuilder sb = new StringBuilder(oldString.Length);
foreach(char c in oldString) {
  if(c == replaceFrom) { c = replaceTo; }
  sb.Append(c);
}
return sb.ToString();
0 голосов
/ 29 января 2009

Каждый раз, когда у кого-то в мире .NET возникает вопрос о регулярном выражении, я рекомендую Expresso ( ссылка ). Это отличный инструмент для работы в запутанном и тернистом мире регулярных выражений.

0 голосов
/ 29 января 2009

Мне нравится RegEx, но в этом случае я бы просто сделал .Замена

    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;

РЕДАКТИРОВАТЬ Я изменил его, чтобы сначала получить незаменяемую часть, если были заменяющие строки другой длины, чем оригинал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...