#c# #string
#c# #строка
Вопрос:
У меня есть строка. «12341234115151_log_1.txt » (эта длина строки не является фиксированной. но шаблон «log» всегда один и тот же) У меня есть цикл for. на каждой итерации я хочу устанавливать число после «log» i.
например «12341234115151_log_2.txt » «12341234115151_log_3.txt » ….
на «12341234115151_log_123.txt «
какой хороший способ сделать это в c #? Спасибо.
Комментарии:
1. Звучит как идеальная работа для регулярного выражения: d _log_(d ).txt
2. Итак, вы хотите, чтобы файлы журнала выглядели следующим образом:
12341234115151_log_1.txt,12341234115151_log_12.txt, 12341234115151_log_123.txt, 12341234115151_log_1234.txt
и т.д.?
Ответ №1:
Регулярное выражение идеально подходит для этого. Вы можете использовать Regex.Replace
метод и использовать MatchEvaluator
делегат для выполнения числового приращения.
string input = "12341234115151_log_1.txt";
string pattern = @"(d )(?=.)";
string result = Regex.Replace(input, pattern,
m => (int.Parse(m.Groups[1].Value) 1).ToString());
Разбивка шаблона выглядит следующим образом:
(d )
: это сопоставляет и фиксирует любую цифру, по крайней мере, один раз(?=.)
: это предварительный просмотр, который гарантирует, что точка (или dot) следует за числом. Точка должна быть экранирована, чтобы быть буквальной точкой вместо метасимвола регулярного выражения. Мы знаем, что значение, которое вы хотите увеличить, находится прямо перед «.txt», поэтому после него всегда должна быть точка. Вы также могли бы использовать(?=.txt)
, чтобы сделать его более понятным и быть явным, но вам, возможно, придется использоватьRegexOptions.IgnoreCase
, если расширение вашего имени файла может иметь разные регистры.
Ответ №2:
Вы можете использовать регулярное выражение. вот так
var r = new Regex("^(.*_log_)(\d).txt$")
for ... {
var newname = r.Replace(filename, "${1}" i ".txt");
}
Ответ №3:
Используйте регулярные выражения, чтобы получить счетчик, затем просто добавьте их вместе.
Если я правильно прочитал ваш вопрос…
Ответ №4:
Как насчет,
for (int i =0; i<some condition; i )
{
string name = "12341234115151_log_" i.ToString() ".txt";
}