2009-03-19 6 views
0

C'est presque certainement quelque chose de vraiment stupide que j'ai oublié, mais je suis perplexe. L'expression suivante de style C# est censé correspondre les numéros de téléphones (un sous-ensemble limité d'entre eux, mais cela est tout simplement l'essai ...):Quel est le problème avec cette expression régulière?

^[0-9]{3}-[0-9]{3}-[0-9]{4}$ 

La chaîne de recherche est la suivante:

978-454-0586\r\nother junk\r\nmore junk\r\nhttp://www.google.com\r\n 

Le expression correspond au numéro de téléphone lorsqu'il est isolé, mais pas à côté d'autres choses. Par exemple, si je supprime tout après le téléphone cela fonctionne tout simplement génial.

Comment puis-je modifier l'expression afin qu'elle corresponde au numéro de téléphone et qu'elle ne se bloque pas sur le reste du courrier indésirable?

Merci! "$" Dans une expression régulière correspond à la fin d'une ligne.

+0

Haha J'aime comment nous avons tous répondu en même temps. J'ai marqué le mien pour suppression pour désencombrer la page. –

+0

semble bien que vous êtes tous corrects. merci beaucoup! –

Répondre

5

Les symboles^et $ signifient respectivement "début de ligne" et "fin de ligne". Débarrassez-vous d'eux si vous voulez faire correspondre au milieu d'une ligne.

+0

En fait, le numéro de téléphone _is_ sur sa propre ligne; voir le \ r \ n après? Si vous deviez appliquer le modificateur MULTILINE comme conseillé par Ariel, la regex fonctionnerait très bien. –

4

Si vous supprimez cela, l'expression rationnelle devrait fonctionner correctement, mais si vous avez "Foo978-454-0586", cela ne fonctionnera pas, puisque "^" correspond au début d'une ligne.

1

Le $ correspond à la fin de la chaîne et non à la fin de la ligne.

1

Le problème est que "^" et "$" l'obligent à correspondre uniquement au début de la chaîne et à la fin de la chaîne.

Retirez ces deux étiquettes et voyez comment vous allez.

3

Les numéros de téléphone sont-ils toujours sur leurs propres lignes? Si oui, ajoutez RegexOptions.Multiline à votre constructeur Regex. Sans cela, regex.match utilise le début et la fin de la chaîne pour^et $.

Questions connexes