Как сделать совпадение без учета регистра для фразы со специальными символами?

#regex

#регулярное выражение

Вопрос:

Я хочу сопоставить [[Party Signatures]] следующее независимо от регистра. Таким образом, тестовый текст может быть: I would like to collect [[party signatureS]] tonight .

Мне удалось сопоставить фразу без квадратных скобок ( (?i)bparty signaturesb ), но я не могу понять, как включить квадратные скобки в поиск.

Комментарии:

1. /[[(.*?)]]/gmi следует ли это делать?

2. @SamuelG Не уверен, на что я здесь смотрю.

3. какой язык вы используете?

4. Просто добавьте скобки в регулярное выражение: (?i)[[party signatures]] , границы слов здесь бесполезны.

5. @Toto Это сработало

Ответ №1:

Вам нужно экранировать квадратные скобки, а затем выполнить не жадное сопоставление содержимого между скобками.

Экранируйте специальные символы с помощью перед скобками и создайте группу захвата, чтобы захватить все, что находится между нулевыми или более скобками, используя (*.?)

         // ignorecare and process multiple lines
        var regex = new Regex(@"[[(.*?)]]", RegexOptions.IgnoreCase | RegexOptions.Multiline);
        var matches = regex.Matches("I would like to collect [[party signatureS]] tonight [[party signatureS]]");

        if (matches.Count > 0)
        {
            Console.WriteLine(matches.Count);
        }
        else
        {
            Console.WriteLine("nope");
        }
  

Ответ №2:

Если вы не используете C #, этот шаблон может помочь:

  • установите модификатор без учета регистра
  • найдите 2 открывающие квадратные скобки
  • ищите любые символы слова или пробелы
  • найдите 2 закрывающие квадратные скобки
 (?i)[{2}[w ]*]{2}