2010-01-21 8 views
1

Je suis en train de remplacer tous les caractères de retour chariot dans une chaîne obtenue à partir d'une zone de texte de plusieurs lignes dans un Windows Form avec la chaîne ", <BR>" de sorte que lorsque je utiliser la chaîne dans du code HTML, il s'affiche correctement.VB.NET: Expression régulière nécessaire pour remplacer le caractère de retour avec une autre chaîne

Function Blah(ByVal strInput As String) As String 
    Dim rexCR As Object 
    rexCR = CreateObject("VBScript.RegExp") 
    rexCR.Pattern = "\r" 
    rexCR.Global = True 
    Blah = rexCR.Replace(strInput, ",<BR>") 
End Function 

Essayé la recherche de l'un des caractères suivants et toujours pas de chance:
\r|\n|\r\c|\cM|\x0d

problème semble être la fonction/expression ne détecte pas les retours chariot dans le texte et je ne sais pas pourquoi ? Je sais que la fonction fonctionne comme je peux mettre une expression différente là-dedans comme un test et c'est OK

Des idées?

+0

pourquoi avez-vous besoin d'une expression rationnelle pour une recherche simple et remplacer? –

+0

Je n'ai pas besoin de ça en tant que tel. Je venais de faire quelques autres regex ailleurs et je travaillais juste sur un copier coller, puis je voulais obstinément comprendre pourquoi ça ne fonctionnait pas. Cependant, je viens d'essayer les deux exemples ci-dessous de S.Mark et ck et aucun d'eux ne fonctionne pour moi non plus. Y a-t-il quelque chose de différent sur la façon dont une boîte de texte multiligne stocke son texte en ce qui concerne les CR? – 9cents

+0

Pour votre information: Dans le cas où quelqu'un vient d'autre sur cette question, je l'ai trouvé qu'il est possible d'obtenir VB.NET regexs à accepter \ r \ n et d'autres se sont échappés des caractères si vous utilisez VS2008 (peut-être possible dans d'autres, ce est juste ce que j'utilise). Accédez aux propriétés de vos projets et sur l'onglet de référence, cochez la case en regard de System.Text.RegularExpressions dans la section Imported namespaces. – 9cents

Répondre

4

D'autres ont déjà fourni de bonnes solutions à votre problème. En général, je voudrais expliquer que VB.NET n'a pas de séquences d'échappement de chaînes (\ n, \ r, \ t, ...) comme C#. String literals in VB.NET sont similaires à verbatim string literals in C# - le seul caractère qui peut être échappé est le guillemet (en le doublant).

Au lieu de cela, vous devez utiliser les constantes de VB (par exemple vbCrLf, vbTab) ou des constantes .net (par exemple Environment.NewLine) et concaténation de chaînes ("Hello World" & vbCrLf au lieu de ` "Bonjour tout le monde \ n").

+0

Les solutions ci-dessus en utilisant les constantes vb n'ont pas fonctionné pour moi bien que je puisse voir qu'ils le feraient pour d'autres. Pouvez-vous clarifier, est-ce parce que lorsque le texte de la zone de texte est affecté à la variable VB.NET omet les retours chariot? – 9cents

+0

Il ne devrait pas. Pouvez-vous jeter un oeil à la chaîne dans le débogueur? (Quelque chose comme 'Console.Writeline (strInput)', puis en regardant la fenêtre de l'outil "Sortie" dans Visual Studio) – Heinzi

+0

Je suis un idiot. J'ai eu un autre morceau de tas de code plus tôt qui nettoie un tas de caractères et il essuie les CRs. _ < N'aurais pas remarqué depuis longtemps si ce n'était pas pour votre suggestion cependant! Puis-je donner des points à tout le monde? <3 – 9cents

5

Qu'en est-normale strInput.Replace(vbCrLf,",<BR>") sans regex?

+0

exactement mon point! ... –

3

Que diriez-vous:

Function Blah(ByVal strInput As String) As String 
    return strInput.Replace(Environment.NewLine, "<br />") 
End Function 
Questions connexes