Regex для сопоставления содержимого тега при одновременном пропуске ведущих и конечных пробелов
-
26-09-2019 - |
Вопрос
Я пытаюсь написать регулярное выражение, которое соответствует целую содержимому тегу, минус любые ведущие или конечные пробелы. Вот пример в отпячении входа:
<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());