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?

È stato utile?

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());
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top