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

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

<tag> text </tag>

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

"текст"

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

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

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


person Sipp    schedule 29.09.2010    source источник
comment
Не используйте. *? посередине там. Это будет занимать пробелы. Вместо этого используйте буквенно-цифровой переход.   -  person JoshD    schedule 29.09.2010


Ответы (3)


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

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

Нужная деталь доступна как $matches[1].

person Alan Moore    schedule 29.09.2010
comment
Спасибо! Это был тип подсказки, который я искал, и он отлично работает. - person Sipp; 01.10.2010

Вам следует не использовать регулярный текст для синтаксического анализа HTML.

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

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

Также: RegEx соответствует открытым тегам, кроме XHTML self -содержащие теги

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

person JoshD    schedule 29.09.2010
comment
Спасибо за ответ и комментарий. Я искал только некоторые указатели регулярных выражений по этому конкретному вопросу; однако из-за вашего ответа и размещенных вами ссылок я собираюсь изучить возможность использования .NET XmlReader для анализа наших файлов KML вместо того, как мы это делаем сейчас. - person Sipp; 01.10.2010

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

person Ruel    schedule 29.09.2010