Помогите с регулярным выражением
От: Аноним  
Дата: 04.10.10 17:19
Оценка:
Есть строка вида: [assembly: AssemblyCulture("параметр")]
Есть паттерн для ее обнаружения: \[assembly: AssemblyCulture\("(?<parameter>w+)"\)\]

Задача: заменить в искомой строке значение группы parameter (в примере строки текст "параметр") на другую строку.

Как заменить значение именованой группы на другое значение?
Что-то вроде match.Result("parameter") = "новый параметр", чтобы получилось [assembly: AssemblyCulture("новый параметр")]
Re: Помогите с регулярным выражением
От: Аноним  
Дата: 04.10.10 17:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть строка вида: [assembly: AssemblyCulture("параметр")]

пардон, строка может быть большой (читай исходный код AssemblyInfo.cs), нужно выделить (найти) именно эту строку и заменить там "параметр" на "новый параметр"
Re: Помогите с регулярным выражением
От: Lloyd Россия  
Дата: 04.10.10 17:37
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>Как заменить значение именованой группы на другое значение?

А>Что-то вроде match.Result("parameter") = "новый параметр", чтобы получилось [assembly: AssemblyCulture("новый параметр")]

Как вариант можно вот так:
const string INPUT = @"[assembly: AssemblyCulture(""параметр"")]";
const string PATTERN = @"(?<start>\[assembly: AssemblyCulture\("")(?<parameter>.*)(?<end>""\)\])";
Match match = Regex.Match(INPUT, PATTERN);
if (match.Success)
    Console.WriteLine("{0}{1}{2}", match.Groups["start"].Value, "new", match.Groups["end"].Value);
Re[2]: Помогите с регулярным выражением
От: Аноним  
Дата: 04.10.10 17:46
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Как вариант можно вот так:

L>
L>const string INPUT = @"[assembly: AssemblyCulture(""параметр"")]";
L>const string PATTERN = @"(?<start>\[assembly: AssemblyCulture\("")(?<parameter>.*)(?<end>""\)\])";
L>Match match = Regex.Match(INPUT, PATTERN);
L>if (match.Success)
L>    Console.WriteLine("{0}{1}{2}", match.Groups["start"].Value, "new", match.Groups["end"].Value);
L>


спасибо.

з.ы. я только начал разбираться с регулярными выражениями, надеялся, что там есть такая необходимая функция (заменить значение конкретной группы на другое значение). я правильно понимаю, что так, как я хочу нельзя сделать?
Re: Помогите с регулярным выражением
От: Пельмешко Россия blog
Дата: 04.10.10 17:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть строка вида: [assembly: AssemblyCulture("параметр")]

А>Есть паттерн для ее обнаружения: \[assembly: AssemblyCulture\("(?<parameter>w+)"\)\]

А>Задача: заменить в искомой строке значение группы parameter (в примере строки текст "параметр") на другую строку.


А>Как заменить значение именованой группы на другое значение?


Надо "поймать" в именованые группы то, что Вы хотите оставить из исходного совпадения, а не то, что хотите заменить:
string value = "[assembly:     AssemblyCulture   (   \"en-US\"  )   ]";

var result = Regex.Replace(
    input: value,
    pattern: @"(?<begin>\[\s*assembly\s*:\s*AssemblyCulture\s*\(\s*"")[\w-]+(?<end>""\s*\)\s*\])",
    replacement: @"${begin}ru-RU${end}");
Ох и любит народ парсить код регвырами...
Re[3]: Помогите с регулярным выражением
От: Lloyd Россия  
Дата: 04.10.10 18:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>з.ы. я только начал разбираться с регулярными выражениями, надеялся, что там есть такая необходимая функция (заменить значение конкретной группы на другое значение). я правильно понимаю, что так, как я хочу нельзя сделать?


В принципе и вот так можно:
const string INPUT = @"[assembly: AssemblyCulture(""параметр"")]";
const string PATTERN = @"\[assembly: AssemblyCulture\(""(?<parameter>.*)""\)\]";
Match match = Regex.Match(INPUT, PATTERN);
if (match.Success) {
    Group parameterGroup = match.Groups["parameter"];
    Console.WriteLine(INPUT.Replace(parameterGroup, "new value"));
}

Re[4]: Помогите с регулярным выражением
От: Аноним  
Дата: 04.10.10 18:18
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>В принципе и вот так можно:

L>
L>const string INPUT = @"[assembly: AssemblyCulture(""параметр"")]";
L>const string PATTERN = @"\[assembly: AssemblyCulture\(""(?<parameter>.*)""\)\]";
L>Match match = Regex.Match(INPUT, PATTERN);
L>if (match.Success) {
L>    Group parameterGroup = match.Groups["parameter"];
L>    Console.WriteLine(INPUT.Replace(parameterGroup, "new value"));
L>}
L>

L>)

что-то в выделенном не так не скомпилится сие
Re[5]: Помогите с регулярным выражением
От: Lloyd Россия  
Дата: 04.10.10 18:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>что-то в выделенном не так не скомпилится сие


static class StringExtensions {
    public static string Replace(this string str, Group group, string value) {
        return str.Substring(0, group.Index) + value + str.Substring(group.Index + group.Length);
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.