Regex per abbinare il contenuto del tag mentre ometteva contemporaneamente spazi bianchi di piombo
-
26-09-2019 - |
Domanda
Sto cercando di scrivere un regex che corrisponda a intero contenuto di un tag, meno qualsiasi spazio bianco di piombo o trailer. Ecco un esempio bollito dell'input:
<tag
>
testo
</tag
>
Voglio che solo i seguenti vengano abbinati (nota come lo spazio bianco prima e dopo la partita è stato tagliato):
"testo"
Attualmente sto cercando di usare questo regex in .NET (PowerShell):
(?<=<tag>(\s)*).*?(?=(\s)*</tag>)
Tuttavia, questo regex corrisponde al "testo" più il principale spazio bianco all'interno del tag, che è indesiderato. Come posso sistemare il mio regex per funzionare come previsto?
Soluzione
Lascia cadere i lookaround; Rendono il lavoro più complicato di quanto deve essere. Invece, usa un gruppo di cattura per scegliere la parte che desideri:
<tag>\s*(.*?)\s*</tag>
La parte che desideri è disponibile come $matches[1]
.
Altri suggerimenti
Non dovresti usare Regext per analizzare HTML.
Usa invece un parser.
Anche:Regex per rimuovere gli attributi del tag corporeo (C#)
Inoltre: Regex match tag aperti tranne i tag autonomi XHTML
Se tutto ciò non ti convince, non usare il punto nel mezzo della tua espressione. Usa la fuga alfanumerica. Il tuo punto consuma spazi bianchi. Usa W (penso) invece.
Usa queste espressioni regolari per spogliarsi e sfogati conduttori. /^\s+/
e /\s+$/
test = "<tag> test </tag>";
string pattern3 = @"<tag>(.*?)</tag>";
Console.WriteLine("{0}", Regex.Match(test,pattern3).Groups[1].Value.Trim());