Regex для сопоставления содержимого тега, одновременно пропуская начальные и конечные пробелы - PullRequest
0 голосов
/ 29 сентября 2010

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

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

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

"текст"

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

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

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

Ответы [ 4 ]

4 голосов
/ 29 сентября 2010

Вы не должны использовать regext для разбора html .

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

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

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

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

1 голос
/ 29 сентября 2010

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

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

Требуемая партия доступна как $matches[1].

0 голосов
/ 29 сентября 2010
        test = "<tag>     test    </tag>";
        string pattern3 = @"<tag>(.*?)</tag>";
        Console.WriteLine("{0}", Regex.Match(test,pattern3).Groups[1].Value.Trim());
0 голосов
/ 29 сентября 2010

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

...