2011-07-08 4 views
0

Je souhaite faire correspondre un motif ASA [az] [az] [0-9] [0-9] et les remplacer par des hyperliens intégrés http://www.stack.com?order=ASA [az] [az] [0-9] [0-9] et l'afficher comme ASA [az] [az] [0-9] [0-9]Problème Regex conditionnel en C#

Exemples: ASAsq96 ou ASApt66

les conditions suivantes doivent être remplies avant que le remplacement devrait se produire

1. modèle ne devrait pas être remplacée si elle se produit dans un lien href

<ahref="samplesample?=ASAsq96\%#');"</a> 

2.Les modèle ne doit pas être remplacée si elle se produit dans une http: // lien

http://www.test.com/ASA[a-z][a-z][0-9][0-9]/example 

http://www.stack.com/ASA[a-z][a-z][0-9][0-9] 

3.But, le modèle doit être remplacé si elle existe seulement dans un lien hypertexte spécifique de type

http://replaceme/ASA[a-z][a-z][0-9][0-9] 

4.Toutes autres modèles existants doivent être remplacés en dehors

Le regex ici parfaitement satisfait aux conditions 2 et 4. Comment puis-je intégrer les conditions 1 et 3 dans cette regex. J'utilise le corps HTML pour traiter le corps.

mail.HTMLBody = Regex.Replace(mail.HTMLBody, 
"(?<!http://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp; 
\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?) 
(ASA[a-z][a-z][0-9][0-9])(?!</a>)", 
"<a href=\"http://www.stack.com?order=$&\">$&</a>"); 

Répondre

0

Y a-t-il une bonne raison pour laquelle vous essayez de combiner un ensemble de conditions différentes en une seule expression régulière? J'aurais une expression distincte pour chaque condition. Cela rendra votre modèle (et logique) beaucoup plus lisible.

+0

Je n'ai pas de raison particulière, mais j'ai besoin de toutes ces conditions avant que le remplacement puisse avoir lieu. Est-il possible de séparer ces conditions et de les exécuter? – thinkcool