2009-09-20 6 views
0

Besoin d'aide, j'ai une expression régulière qui semble fonctionner très bien lorsque je mets le motif et la chaîne à analyser dans le testeur de regexlib. Cependant, quand je l'ai mis en C#, la même chose n'arrive pas, aucune correspondance.Expression régulière fonctionne à regexlib mais pas dans le code C#

Voici mon modèle de correspondance, ont essayé les deux:

string regPattern = "\\{\\$([^\\$\\}]+)\\$\\}"; 

Ma chaîne à analyser provient d'une base de données et est mis dans une variable après l'utilisation ToString(). Voici un exemple de la chaîne (en utilisant Text Visualizer dans VS2008) qui fonctionne à regextlib mais pas en C#.

<p>1.Age?: -- Select One --<br /> 
2.HowFindProduct?: Friend/Relative Recommendation<br /> 
3.Influencers?: {$InfluencedDecision$}<br /> 
4.WherePurchase?: Office Superstore - i.e. Staples_ Office Depot_ Of<br /> 
5.ReplacementProduct?: This is a replacement to my previous product<br /> 
6.OtherBrands?: {$OtherBrands$}<br /> 
7.Income?: -- Select One --<br /> 
FirstName: John<br /> 
Initial: H<br /> 
LastName: Smith<br /> 
Address1: 123 any street<br /> 
Address2: suite 2<br /> 
City: any city<br /> 
State: CA<br /> 
ZipCode: 55555<br /> 
Country: usa<br /> 
EmailAddress: [email protected]<br /> 
Phone#: 714-555-1212<br /> 
ModelNumber: AXXXX<br /> 
SerialNumber: 23123d234s2s<br /> 
DateofPurchase: 09/09/2009<br /> 
NotifyMe1: on<br /> 
NotifyMe2: on</p> 

Et tout simple, si elle aide, voici le code que je utilise:

string regPattern = "\\{\\$([^\\$\\}]+)\\$\\}"; 
Regex.Replace(bodytext.ToString(), regPattern, "",RegexOptions.Multiline); 

J'ai aussi essayé modèle en utilisant la déclaration @ et Regex.Escape. Besoin d'aide ici.

Des idées?

Répondre

1

Eh bien, votre deuxième instruction est actuellement inutile parce que vous ignorez la valeur de retour. Ne pas oublier que les chaînes sont immuables - l'appel Regex.Replace ne changera aucune chaîne existante; il retournera une nouvelle chaîne avec les opérations de remplacement appropriées effectuées. Si vous faites ceci:

string regPattern = "\\{\\$([^\\$\\}]+)\\$\\}"; 
string replacedText = Regex.Replace(bodytext.ToString(), regPattern, 
            "", RegexOptions.Multiline); 

alors replacedText est l'original avec des choses comme {$OtherBrands$} enlevées - J'ai essayé dans un programme de test. Si ce n'est pas ce que vous vouliez, donnez plus d'informations sur ce que vous essayez de faire.

Cela dit, votre modèle d'expression régulière serait plus claire en utilisant une chaîne littérale mot à mot:

string regPattern = @"\{\$([^\$\}]+)\$\}"; 
+0

Je suis désolé, tapés pour l'exemple (VS ont beaucoup plus de choses). Je vais essayer votre expression. Merci pour votre aide! –

+0

Saint Tolède Batman! Rien de tel que manquer l'évidence dans mon code original. J'étais trop concentré dans le motif comme un problème que j'ai manqué la logique d'affectation qui a couru plus tard dans un bloc si le bloc n'avait pas le chemin d'exécution. Vous m'avez probablement sauvé beaucoup de temps avant que je l'aurais remarqué. –

Questions connexes