2010-09-29 19 views
0

J'essaie d'écrire une expression rationnelle qui correspond à tout le contenu d'une balise, moins tout espace de début ou de fin. Voici un exemple bouilli vers le bas de l'entrée:Regex pour faire correspondre le contenu de la balise tout en omettant simultanément les espaces de début et de fin

<tag> texte </tag>

Je veux que ce qui suit à apparier (notez la façon dont les espaces blancs avant et après que le match a été coupé):

" texte »

Je tente d'utiliser actuellement cette regex dans .NET (Powershell):

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

Cependant, cela correspond regex « texte » plus le premier des espaces à l'intérieur de l'étiquette, ce qui est indésirable . Comment puis-je réparer mon expression régulière pour fonctionner comme prévu?

+0

Ne pas utiliser. *? au milieu là. Cela consommera des espaces blancs. Utilisez l'échappement alphanumérique à la place. – JoshD

Répondre

1

Laissez tomber le lookarounds; ils rendent le travail plus compliqué que nécessaire. Au lieu de cela, utilisez un groupe de capture pour choisir la partie que vous voulez:

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

La partie que vous voulez est disponible en $matches[1].

+0

Merci! C'était le genre de conseil que je cherchais, et ça fonctionne très bien. – Sipp

4

You should not use regext to parse html.

Utilisez plutôt un analyseur.

aussi: Regex to remove body tag attributes (C#)

Aussi aussi: RegEx match open tags except XHTML self-contained tags

Si tout cela ne vous convainc pas, ne pas utiliser le point au milieu de votre expression. Utilisez l'échappement alphanumérique. Votre point est en train de consommer des espaces. Utilisez \ w (je pense) à la place.

+0

Merci pour la réponse et le commentaire. Je cherchais seulement des pointeurs regex sur cette question particulière; Cependant, à cause de votre réponse et des liens que vous avez publiés, je vais utiliser XmlReader de .NET pour analyser nos fichiers KML au lieu de la façon dont nous le faisons actuellement. – Sipp

0

Utilisez ces expressions régulières pour supprimer les espaces de fin et de début. /^\s+/ et /\s+$/

0
 test = "<tag>  test </tag>"; 
     string pattern3 = @"<tag>(.*?)</tag>"; 
     Console.WriteLine("{0}", Regex.Match(test,pattern3).Groups[1].Value.Trim());