2010-11-23 3 views
2

Je dois utiliser des expressions régulières dans une application C# et j'essaie de l'utiliser comme une chaîne pour utiliser la méthode regex.match. Mon expression régulière est comme id="(tt[0-9]+)\|imdb et je la convertis en chaîne comme "id\"(tt[0-9]+)\\|imdb" mais cela ne fonctionne pas. Avez-vous des solutions ou des applications qui convertissent les regex en chaînes?expressions régulières à chaîne dans C#

+3

votre chaîne est manquante le = est-ce intentionnel? –

Répondre

2

Vous pouvez supprimer l'échappement et utiliser un signe @.

@"id=""(tt[0-9]+)\|imdb" 

Note: vous devez doubler les doublequotes

1

En C#, il est une bonne idée d'ajouter une @ avant chaînes contenant reg exps:

@"id\"(tt[0-9]+)\\|imdb" 

Sinon, le moteur regexp serait seulement voir cette chaîne:

id"(tt[0-9]+)\|imdb 

\| n'est pas reco Gnized comme vous le voulez.

+0

Bon conseil, pas si bonne explication. Dans la version verbatim string, le '\" 'doit être changé en' "" 'et la barre oblique inverse supplémentaire dans' \\ | 'devrait être supprimée, mais l'expression rationnelle de l'OP est bien formée pour une chaîne non verbatim. le vrai problème était le '=' manquant, comme @AndrewCox a souligné dans son commentaire –

3

Je ne suis pas sûr de ce que vous essayez d'accomplir, alors je suis sur un autre chemin que les autres postes.

La méthode Regex.Match devrait prendre le String que vous essayez de faire correspondre, il semble que vous essayez de revenir en arrière d'un RegEx construit à une chaîne. Si tel est le cas, appelez simplement ToString() sur le RegEx pour obtenir l'expression transmise.

Si vous essayez simplement d'obtenir l'expression en tant que chaîne alors le pattern var ci-dessous afin que serait faire usage du @ comme mentionné dans les autres postes. Quoi qu'il en soit, le RegEx lui-même devrait contenir le motif que vous voulez comparer.

string text = "91919182389348487"; 
    string pattern = @"id=""(tt[0-9]+)\|imdb"; 

    Regex r = new Regex(pat, RegexOptions.IgnoreCase); 
    Match m = r.Match(text); 
    ... 
+0

merci qui a fonctionné parfaitement !! –

+2

@Emre Assurez-vous de l'accepter comme réponse, merci –

Questions connexes