2010-04-19 5 views
4

Je possède ce texte un peu modèle:Question Regex pour saisir des clés

Bonjour {# Nom #},

Merci d'être venu blah sur {# Date de #} et nous aimons de vous revoir ici avec {# #} Président

Je suis en train d'obtenir des pièces {#...#} de modèles et de les mettre dans un tableau.

Mais mon expression ne fonctionne pas:

\b(?<=\{\#)(.*)(?=\#\})\b 

Le résultat est devenu quelque chose comme ça pour ce texte exemple:

{#Something#} Hello {#Brand#} 

Résultat:

Something#} Hello {#Brand

+0

Pour votre information: .NET a quelque chose de très similaire construit via des expressions de liaison de données. Voir cet article pour un exemple de comment l'utiliser: http://haacked.com/archive/2009/01/04/fun-with-named-formats-string-parsing-and-edge-cases.aspx – chilltemp

Répondre

4

Ajoutez simplement ? pour la paresse comme ceci:

\b(?<=\{\#)(.*?)(?=\#\})\b 

*? means qu'il recherchera le moins de répétitions possible

+0

Il didn ne travaille pas non plus. Le résultat est vide. – Tarik

+1

@Braveyard - Désolé. Un support inutile. Vérifiez à nouveau – Hun1Ahpu

3

Que pensez-vous de cela? {#([^#]+)#}

Voici l'exemple utilisé dans un script PowerShell:

$input = "{#Something#} Hello {#Brand#}" 

$match = [regex]::Match($input, "{#([^#]+)#}") 

$i = 0 

while ($match.Success) { 
    $i++ 
    write-host ("Match {0}: '{1}'" -f $i, $match.Groups[1].Value) 
    $match = $match.NextMatch() 
} 

Et voici ce qu'elle génère:

Match 1: 'Something' 
Match 2: 'Brand' 
+0

Cela n'a pas fonctionné. '{{' est le résultat. J'utilise Expresso pour évaluer les résultats. – Tarik

+0

J'ai utilisé RegexBuddy - fonctionne sur ma machine! Je vais mettre à jour ma réponse avec un morceau de PowerShell pour prouver le point. –

+0

Je pense qu'il devrait y avoir une différence entre les moteurs Regex? Parce que '{' devrait être écrit avec '\\' pour indiquer que c'est un littéral plutôt qu'un symbole. – Tarik