Упростить группировку регулярных выражений - PullRequest
1 голос
/ 19 апреля 2019
var pattern = (?:[P|p]rint\("")(.+)(?:""\);?)

var input = Print("Hello World");

Результаты в двух группах, вторая захватывает именно то, что я хочу захватить, а первая совершенно бесполезна, как мне удалить первую?

Я пытался (?: ABC) это не сработало

Ответы [ 2 ]

1 голос
/ 19 апреля 2019

В вашем шаблоне используется 1 группа захвата () и 2 группы без захвата, используя (?:)

Эти 2 группы без захвата, которые вы можете опустить, а также | из класса символов. Я думаю, что вы также хотели бы сделать .* не жадным, как .*?, чтобы предотвратить совпадение.

Тогда ваш шаблон может выглядеть так (соответствует необязательной точке с запятой в конце):

[Pp]rint\("(.+?)"\);?

Regex demo

Вы также можете использовать версию с отрицательным классом символов , чтобы не совпадать с двойной кавычкой:

[Pp]rint\(("[^"]+)"\);

Regex demo

0 голосов
/ 19 апреля 2019

Попробуйте следующее:

            string input = "var input = Print(\"Hello World\");";
            string pattern = "[Pp]rint\\(\"(?'message'[^\"]+)";

            Match match = Regex.Match(input, pattern);
            string message = match.Groups["message"].Value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...