Как в Regex в качества аргумента передать массив?

208
07 декабря 2018, 09:50

Подскажите, как в Regex передать массив
Я попытался, но компилятор выдает ошибку

Regex regex = new Regex(keywords);

Answer 1

Как уже было сказано - создать объект класса Regex из массива Вам не удастся (не поддерживает его конструктор такую сигнатуру, это и очевидно!).

Если Ваша задача звучит так:

хочу, чтобы Regex находил все "слова" в тексте, которые есть в массиве

то Вам действительно необходимо сначала Ваш массив слов преобразовать в строку регулярного выражения:

static string GenRegexStr(string[] words){
        var strBuilder = new StringBuilder();
        foreach (string word in words)
        {
            strBuilder.AppendFormat("({0})|", word);
        }
        strBuilder.Length--; //убираем последний "|" 
        return strBuilder.ToString();
    }

Дальше уже дело за малым:

var elements = new string[] { "text", "lorem" };
var regexStr = Program.GenRegexStr(elements);
var regexp = new Regex(regexStr);
var matches = regexp.Matches("lorem ipsum test text bla bla bla");
foreach(Match match in matches) {
    Console.WriteLine(match.Value);
}

Результат:

lorem
text
READ ALSO
IE расширение регистрация в windows

IE расширение регистрация в windows

Работаю с BHO IE на C#

182
Написать Linq-аналог запроса

Написать Linq-аналог запроса

Я хочу преобразовать этот SQL в LINQ, но сталкиваются с трудностями, может кто-нибудь мне помочь?

147
Производительность рефлексии

Производительность рефлексии

Подскажите, если я найду все необходимые мне свойства и сохраню PropertyInfo в какой-нибудь словарь, то при последующей работе через эту переменную...

123
Как установить хук на окно?

Как установить хук на окно?

Подскажите как установить хук SetWindowsHookEx на определённое окно, к примеру на окно Notepad, и проверять только егоК примеру если я запустил блокнот...

124