2013-03-13 5 views
0

J'essaie de faire un REGEX pour extraire le texte après First name:, Last name:, Email: et non inclus l'étiquette.Correspondance début de la ligne retour du texte après match

Voici mon texte entre les balises.

<MyText> 
First name: Chris 
Last name: Jones 
Email: [email protected] 
</myText> 

J'ai été jouer avec quelque chose comme ceci: /(Last name:).*? Mais cela ne fonctionne pas. Est-ce que quelqu'un sait comment résoudre cela?

+0

Quel dialecte d'expressions régulières utilisez-vous? – MattW

+0

Merci pour l'édition Wouter! –

+0

@mattw J'utilise C# –

Répondre

1

Avec un Regex .NET, vous pouvez utiliser les assertions arrières, positives:

new Regex(@"(?<=Last name:).*"); 

Selon le contexte, vous devrez peut-être attention, cependant - le moteur d'expressions rationnelles JavaScript ne supporte pas les assertions lookbehind, donc vous ne pourriez pas, par exemple, utiliser ce côté client dans un ASP.NET RegularExpressionValidator.

+0

ah c'est celui-là! "(? <= Nom de famille:). *" Je n'avais pas besoin du? à la fin # –

+0

Merci champion cela a fonctionné un régal! –

0

Essayez cette regexp:

/^.*?: (.*)$/ 
+0

Désolé Champ, je veux trois regex au total un pour chaque étiquette, premier et dernier email. retourner le texte après le: –

1

Je ne sais pas vraiment votre langage de script (le support REGEX peut être la différence). Mais quelque chose comme cela devrait fonctionner:

/^.*?:(.*?)$/m 

Certains explaination:

A regex avec modificateur m (//m) signifie que ^ et $ match de le début et la fin de chaque ligne, pas le début et la fin d'un chaîne.

La pièce .*?: correspond à Last name:, First name:, ect. et parce que ce n'est pas entre parenthèses (()), ceci n'est pas capturé.

La (.*?) partie correspond à tout ce qui est après les deux points (:) et parce que le $ est placé après, il sera tout match jusqu'à la fin de la ligne. C'est entre parenthèses, ce qui signifie qu'il sera capturé.


Pour répondre à votre édition, utilisez ceci:

/^First name: (.*?)$/m 
/^Last name: (.*?)$/m 
/^Email: (.*?)$/m 
+0

Cela ne fonctionne pas. Je veux trois regex au total un pour chaque étiquette –

+0

@ChrisJones édité l'expression régulière pour ce faire –

+0

Merci encore pour une réponse détaillée. –

Questions connexes