Как найти строку между двумя другими строками с помощью регулярного выражения? - PullRequest
2 голосов
/ 26 ноября 2009

Более или менее очевидно:

\[start\](.*?)\[end\]

но это также дает теги [start] и [end]. Как вы их опускаете?

Например: f("[somestartstring]result[someendstring]") == "result"

ОБНОВЛЕНИЕ: предлагаемые ответы не работают. Мой код:

printfn "%s" (Regex.Match(@"[start]result[end]",
                          "\\[start\\](.*?)\\[end\\]").Groups.[0].Value)

но все равно выдает окружающие начальный и конечный теги.

Моя ошибка: индекс 0! Спасибо.

Ответы [ 4 ]

5 голосов
/ 26 ноября 2009

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

\[start\](.*?)\[end\]

Они нумеруются с 1, когда вы приходите их читать (ноль - вся совпадающая строка). (Существует также возможность именованных групп, если вы находите это более интуитивно понятным.)

например. в C #:

Match match = new Regex("\[start\](.*?)\[end\]").Match("[start]blah[end]");
string value = match.Groups[1].Value;
3 голосов
/ 26 ноября 2009

Помните Groups[0] соответствует всему вводу. Если вы просто хотите первую захваченную группу, это Groups[1], поэтому

string text = "[start]blahblah[end]";
Console.WriteLine(Regex.Match(text, @"\[start\](.*?)\[end\]").Groups[1].Value);

отпечатков blahblah.

1 голос
/ 26 ноября 2009

Использование \[start\](.*?)\[end\]

C #

Regex regex = new Regex("\\[start\\](.*?)\\[end\\]");

VB

Dim regex As Regex = New Regex("\[start\](.*?)\[end\]")
0 голосов
/ 26 ноября 2009

Зависит от языка. Обычно вы должны указать подходящую группу, которую хотите вернуть; часто ноль группы - это полное совпадающее выражение, 1 - первая совпадающая группа, 2 - вторая совпадающая группа и т. д.

Обновление 1 : см. http://www.regular -expressions.info / dotnet.html

Обновление 2 : Автор, похоже, думал, что понимает синтаксис .NET. Таким образом, удалив пример кода и оставив ответ на свой вопрос.

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