1 Востаннє редагувалося Betterthanyou (26.05.2021 12:50:41)

Тема: Регулярні вирази. Замінити слово

Потрібно знайти слово "from" і замінити його.

Приклад:
"data_and_more_data\n\rfrom the_end"
"data_and_more_data from the_end"

Замінити на:
"data_and_more_data REPLACED the_end"


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Text.RegularExpressions;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var query = "data_and_more_data\n\rfrom the_end";
            var rr = "REPLACED";
            Regex rgx2 = new Regex("\bfrom\b", RegexOptions.IgnoreCase);
            query = rgx2.Replace(query, rr, 1);
            
            Console.WriteLine("= " + query);
        }
    }
}

Проблема в тому що new Regex(" from ", RegexOptions.IgnoreCase); не заміняє слово якщо воно розпочинається з нового рядка,
а варіант new Regex("from", RegexOptions.IgnoreCase); заміняє уривок слова (Наприклад: frommer на REPLACEDmer)

Word Boundary: \b - має вирішити цю проблема... але чомусь не спрацьовує...

Як замінити слово "from" так щоб враховувався пробіл та знак нового рядка, але не відбувалася заміна якщо перед/після слова йдуть будь-які символи (окрім пробілу чи нового рядка) ?

2 Востаннє редагувалося koala (26.05.2021 14:49:41)

Re: Регулярні вирази. Замінити слово

... new Regex("\\bfrom\\b", ...

або

... new Regex(@"\bfrom\b", ...

\ у стрічці обробляється як екранування за правилами мови, зокрема, \b - це backspace. Вам треба або екранувати зворотний дріб (\\), або скористатися дослівним стрічковим літералом (@"").

Будь ласка, наступного разу замість "не спрацьовує" описуйте що відбувається - тобто query лишається такою ж, як була. Негативний опис (чого НЕ відбувається) лишає великий простір для фантазії.

Подякували: Betterthanyou, leofun012