Заменяющее получение Regex сопровождается цифрой

Я пытаюсь заставить замену Regex, работающую обновлять мои файлы AssemblyInfo.cs, таким образом, я имею:

Regex.Replace(
    contents, 
    @"(\[assembly: Assembly(File)?Version\("").*(""\)\])", 
    "$1" + version + "$3"
);

Проблема - это version что-то как "1.5.3.0", так, чтобы, когда замена оценена, она видела "$11.5.3.0$3" и по-видимому ищет одиннадцатую полученную группу, потому что она выпускает:

$11.5.3.0")]

Если палка пространство после $1 это хорошо работает. Что я должен поместить там для выхода из второй цифры, на самом деле не вставляя символ?

27
задан derkyjadex 12 August 2010 в 10:59
поделиться

1 ответ

Используйте $ {1} вместо $ 1 . Это также синтаксис подстановки для именованной группы захвата (? ) .

Вот отрывок для иллюстрации ( см. Также на ideone.com ):

Console.WriteLine(Regex.Replace("abc", "(.)", "$11"));        // $11$11$11
Console.WriteLine(Regex.Replace("abc", "(.)", "${1}1"));      // a1b1c1
Console.WriteLine(Regex.Replace("abc", "(?<x>.)", "${x}1"));  // a1b1c1

Это поведение явно задокументировано:

Элементы языка регулярных выражений - Подстановки

Подстановка нумерованной группы

Элемент языка $ number включает последнюю подстроку, совпадающую с группой захвата номер в строке замены, где число - это индекс группы захвата.

Если номер не указывает допустимую группу захвата, определенную в шаблоне регулярного выражения, $ number интерпретируется как буквальная последовательность символов , которая используется для заменить каждое совпадение.

Замена именованной группы

Элемент языка $ {name} заменяет последнюю подстроку, совпадающую с записью группы name , где name - это имя группы захвата, определенной элементом языка (? ) .

Если имя не указывает допустимую именованную группу захвата, определенную в шаблоне регулярного выражения, $ {name} интерпретируется как буквальная последовательность символов , которая используется для замены каждого совпадения.

41
ответ дан 28 November 2019 в 05:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: