Regex для сопоставления содержимого тега при одновременном пропуске ведущих и конечных пробелов

StackOverflow https://stackoverflow.com/questions/3818219

Вопрос

Я пытаюсь написать регулярное выражение, которое соответствует целую содержимому тегу, минус любые ведущие или конечные пробелы. Вот пример в отпячении входа:

<tag> текст </tag>

Я хочу только следующую, чтобы соответствовать (обратите внимание, как пробел до и после матча был обрезан):

"текст"

В настоящее время я пытаюсь использовать это Regex в .NET (PowerShell):

(?<=<tag>(\s)*).*?(?=(\s)*</tag>)

Однако это Regex соответствует «тексту» плюс ведущий пробел внутри тега, который нежелательно. Как я могу исправить свое регулярное выражение для работы, как и ожидалось?

Это было полезно?

Решение

Бросить поиск; Они просто делают работу более сложной, чем она должна быть. Вместо этого используйте сборную группу, чтобы выбрать деталь, которую вы хотите:

<tag>\s*(.*?)\s*</tag>

Часть, которую вы хотите, доступен как $matches[1].

Другие советы

Вы не должны использовать Regext для анализа HTML.

Вместо этого используйте парсер.

Также:Regex для удаления атрибутов бирки тела (C #)

Также также: Regex Соответствует открытым тегам, кроме XHTML автономных тегов

Если все, что не убедит вас, то не используйте точку в середине своего выражения. Используйте буквенно-цифровой escape. Ваша точка потребляющая пробел. Используйте w (я думаю) вместо этого.

Используйте эти регулярные выражения для прокладки трейлинга и ведущих пробелов. /^\s+/ а также /\s+$/

        test = "<tag>     test    </tag>";
        string pattern3 = @"<tag>(.*?)</tag>";
        Console.WriteLine("{0}", Regex.Match(test,pattern3).Groups[1].Value.Trim());
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top