Объедините несколько вызовов Regex.Replace - PullRequest
2 голосов
/ 17 мая 2011

У меня есть текстовый процессор, который включает в себя сотни вызовов Regex.Replace. Многие из них работают над одним и тем же текстом. Например, они удаляют пробелы и нежелательные символы, заключают в скобки цифры, удаляют слова из черного списка и т. Д.

Есть ли способ сделать несколько замен с разными шаблонами одним вызовом? Мне интересно об этом, потому что мой код в настоящее время довольно медленный, и я предполагаю, что это сэкономит некоторые циклы.

Ответы [ 3 ]

1 голос
/ 25 июля 2015

Incase, кто-нибудь хочет заменить несколько строк несколькими значениями с помощью Regex.Код

"this is sentence.".Replace("is", "are");
//output-   thare are sentence.

.... отстой, потому что он заменяет все совпадающие символы.Это не будет различать «это» и «есть».Вы можете использовать словарь и регулярные выражения следующим образом:

Dictionary<string, string> replacements = new Dictionary<string, string>();
replacements.Add("is", "are");
replacements.Add("this", "these");
string temp;
foreach (KeyValuePair<string,string> replacement in replacements)
{
    address = Regex.Replace(address, @"\b" + replacement.Key + "\\b", replacement.Value);
}

Примечание: будьте осторожны с частью @"\b" + replacement.Key + "\\b".Это доставило мне много головной боли.

1 голос
/ 17 мая 2011

Да, вот простой пример:

myText = new Regex("hello").Replace(myText, "");
myText = new Regex("goodBye").Replace(myText, "");

Может быть заменен на:

myText = new Regex("hello|goodbye").Replace(myText, "");

.Это действительно зависит.

0 голосов
/ 17 мая 2011

Если это только для пробелов, нежелательных символов и слов из черного списка, почему бы вам не попробовать функции string / StringBuilder?

string newString = oldString.Replace('`','\0');
string newString = oldString.Replace("blackword","");

Также посмотрите здесь: Замените несколько слов в строке и Замена нескольких строковых элементов в C #

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...