Регулярное выражение заменяет отдельной заменой в зависимости от совпаденияC#

Место общения программистов C#
Ответить
Anonymous
 Регулярное выражение заменяет отдельной заменой в зависимости от совпадения

Сообщение Anonymous »

Предположим, что у меня есть словарь (слово и его замены) как:

Код: Выделить всё

var replacements = new Dictionary();
replacements.Add("str", "string0");
replacements.Add("str1", "string1");
replacements.Add("str2", "string2");
...
и входную строку в виде:

Код: Выделить всё

 string input = @"@str is a #str is a [str1] is a &str1 @str2 one test $str2 also [str]";
Изменить:

Ожидаемый результат:

Код: Выделить всё

string0 is a string0 is string0 is string1 string2 one test string2
Я хочу заменить все вхождения слова '[CharSymbol]word' на его соответствующую запись/значение из словаря.

где Charsymbol может быть @#$%^&*[] .. а также ']' после того, как слово допустимо, т.е. [str] .

Для замены я попробовал следующее

Код: Выделить всё

string input = @"@str is a #str is a [str1] is a &str1 @str2 one test $str2 also [str]";
string pattern = @"(([@$&#\[]+)([a-zA-Z])*(\])*)"; // correct?
Regex re = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
// string outputString = re.Replace(input,"string0");
string newString = re.Replace(input, match =>
{
Debug.WriteLine(match.ToString()); // match is [str] #str
string lookup = "~"; // default value
replacements.TryGetValue(match.Value,out lookup);
return lookup;
});
Как получить совпадение в виде str , str1 и т. д., т. е. слова без символа.

Подробнее здесь: https://stackoverflow.com/questions/117 ... -the-match
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»