2017-01-31 4 views
-4

Необходимо заменить операнды с именем, как [WORD, WORD1, WORD2,..., WORDnnn] в выражении типа:C# Regex заменить подобные слова

WORD-WORD1+WORD11 

с операндами именем как:

[WORD_NEW, WORD1_NEW, WORD2_NEW, WORDnnn_NEW] 

Некоторые из операндов не отображаются, а те должны не подлежат замене.

WORD-WORD1+WORD11 => WORD_NEW-WORD1_NEW+WORD11_NEW 
WORD-WORD1+WORD11 => WORD_NEW-WORD1_NEW+WORD11 if WORD11 is not mapped. 
+1

Почему бы просто не использовать 'string.Replace()'. –

+0

Итак, вы хотите, чтобы мы сделали это за вас? Почему бы вам не показать нам, что вы пробовали до сих пор? –

+0

string.Replace не работает. Рассмотрим string.Replace («WORD», «WORD_NEW»). Он заменит «WORD» во всех операндах. – Striped

ответ

0

Поскольку у вас уже есть карта (предположительно в виде Dictionary<string,string>) просто запустить Replace, который принимает делегат и проверить, если отображение присутствует для каждого конкретного матча:

var mapping = new Dictionary<string,string>{{"WORD1", "WORD_NEW1"}}; 
var result = Regex.Replace("WORD-WORD1+WORD11", "WORD\d+", 
    match => mapping.ContainsKey(match.Value)? mapping[match.Value] : match.Value); 
// result is "WORD-WORD_NEW1+WORD11" 
0

Это должно работать.

Regexp:

(WORD\d*) 

Заменить:

$1_NEW 

C# Код:

using System; 
using System.Text.RegularExpressions; 

public class Example 
{ 
    public static void Main() 
    { 
     string pattern = @"(WORD\d*)"; 
     string substitution = @"$1_NEW"; 
     string input = @"WORD, WORD1, WORD2"; 
     RegexOptions options = RegexOptions.Multiline; 

     Regex regex = new Regex(pattern, options); 
     string result = regex.Replace(input, substitution); 
     Console.WriteLine(result); 
    } 
} 

ВЫВОД:

WORD_NEW, WORD1_NEW, WORD2_NEW 

См: https://regex101.com/r/2uTCjD/1

Попробуй: http://ideone.com/01Yxng

Смежные вопросы