Regex para combinar com o conteúdo da tag enquanto omola simultaneamente para o espaço em branco e arrastar
-
26-09-2019 - |
Pergunta
Estou tentando escrever um regex que corresponda ao conteúdo inteiro de uma tag, menos qualquer espaço em branco principal ou à direita. Aqui está um exemplo abafado da entrada:
<tag
>
texto
</tag
>
Eu quero que apenas o seguinte seja correspondido (observe como o espaço em branco antes e depois da partida foi aparado):
"texto"
Atualmente, estou tentando usar este regex no .net (PowerShell):
(?<=<tag>(\s)*).*?(?=(\s)*</tag>)
No entanto, esse regex corresponde ao "texto" mais o espaço de branco principal dentro da tag, que não é inspirado. Como posso consertar meu regex para funcionar como esperado?
Solução
Soltar os looks; Eles apenas tornam o trabalho mais complicado do que precisa. Em vez disso, use um grupo de captura para escolher a parte que você deseja:
<tag>\s*(.*?)\s*</tag>
A parte que você deseja está disponível como $matches[1]
.
Outras dicas
Você não deve usar o regext para analisar html.
Use um analisador em vez disso.
Também:Regex para remover atributos da etiqueta corporal (c#)
Também: Regex corresponde a tags abertas, exceto xhtml tags independentes
Se tudo isso não o convencer, não use o ponto no meio da sua expressão. Use a fuga alfanumérica. Seu ponto está consumindo espaço em branco. Use w (eu acho).
Use essas expressões regulares para retirar os espaços de branco à direita e liderança. /^\s+/
e /\s+$/
test = "<tag> test </tag>";
string pattern3 = @"<tag>(.*?)</tag>";
Console.WriteLine("{0}", Regex.Match(test,pattern3).Groups[1].Value.Trim());