Rust - как полностью заменить строку?

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

for line in f.lines(){         
    let line_r = line.expect("Unable to read line");

if re2.is_match(&line_r){
        continue;
    }

if re3.is_match(&line_r){
   // здесь новое значение существует и печатаеся
   let line_r = "2024-05-04 17:33:27,936 NEW string";                        
       println!("{:?}", line_r); 
    }    
   //здесь нет нового значения уже
       println!("{:?}", line_r);  

Ответы (2 шт):

Автор решения: tiovi

Попробуйте так.

    for line in f.lines(){         
        let mut line_r = line.expect("Unable to read line");

    if re2.is_match(&line_r){
            continue;
        }

    if re3.is_match(&line_r){
       // здесь новое значение существует и печатаеся
       line_r = "2024-05-04 17:33:27,936 NEW string";                        
           println!("{:?}", line_r); 
        }    
       //здесь нет нового значения уже
          println!("{:?}", line_r); 

Дело в том, что вы создавали новую переменную line_r в блоке if и поэтому внешняя переменная line_r, которая была прочитана, останется неизменной.

Мы используем одну переменную line_r и присваиваем ей новое значение внутри условия

→ Ссылка
Автор решения: Dima

Сам тупил видимо я. Вот так получилось. Нужно было ее сделать мутабельной и использовать String::from.

for line in f.lines(){         
    let mut line_r = line.expect("Unable to read line");

if re2.is_match(&line_r){
        continue;
    }

if re3.is_match(&line_r){
        line_r = String::from("2024-05-04 17:33:27,936");                        
    }    
  

    println!("{:?}", line_r); 
→ Ссылка