2010-07-24 13 views
1

En Perl, vous pouvez écrireUtilisation de constructions perl regex dans VB.Net?

$string =~ tr/[a,e,i,o,u,y]/[A,E,I,O,U,Y]/; 

par exemple.

Est-il possible d'obtenir les mêmes effets de "translation" avec les regex VB.Net?

Merci pour vous!

PS: Je ne suis pas la recherche d'un moyen de cet exemple le port même, il est plus d'une question de curiosité :)

+1

L'exemple est plus concis écrit comme '$ string = ~ tr/aeiouy/AEIOUY /;' – mob

+1

La chose surprenante est que cela fonctionne correctement comme il l'a écrit, puisque les parenthèses et les virgules sont en t Le même endroit dans les deux cordes. Il remplace simplement les parenthèses et les virgules avec le même caractère. Cela rejette le nombre de remplacements, mais cela est souvent inutilisé. – cjm

Répondre

1

Il n'y a pas de méthode standard pour cela. Vous pouvez le faire en itérant sur chaque caractère de votre chaîne d'entrée et en utilisant un dictionnaire pour le mapper à un autre caractère (ou le laisser inchangé si le caractère n'est pas trouvé dans le dictionnaire). Le résultat peut être construit en utilisant un StringBuilder pour des raisons de performances.

Si les performances ne sont pas un problème, alors vous pourriez être en mesure d'utiliser quelques-unes remplacer les opérations à la place:

s = s.Replace("a", "A") 
    .Replace("e", "E") 
    ... 
    .Replace("y", "Y"); 
+0

Comme je l'ai dit, je n'essaie pas de reproduire le comportement de cet exemple, mais je voulais juste maintenant s'il y avait une construction similaire :) –

+0

@CFP: Alors la réponse est non, mais vous pouvez en écrire un vous-même en utilisant la méthode que j'ai décrite dans ma réponse (premier paragraphe). –

0

est ici une façon de le faire:

public string fakeTR(string theString, char[] org, char[] rep) 
{ 
    for(int i=0;i<org.lenght;i++) 
    { 
    theString = theString.Replace(org[i], rep[i]); 
    } 
    return theString; 
} 

You would be able to call it with somewhat clunky but shorter: 

string v = "Black in South Dakota"; 
v = fakeTR(v, new char[]{'B','l','a','c','k'}, new char[]{'W','h','i','t','e'}); 

H/T http://discuss.joelonsoftware.com/default.asp?dotnet.12.306220.6