2010-07-24 2 views
1

В Perl'е вы можете написатьИспользование Perl-регулярных выражений в VB.Net?

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

, например.

Можно ли достичь таких же «эффектов перевода» с помощью регулярных выражений VB.Net?

Спасибо!

PS: Я не искал способ перенести этот самый пример, это больше любопытства вопрос :)

+1

Пример более кратко написан как '$ string = ~ tr/aeiouy/AEIOUY /;' – mob

+1

Удивительно, что он работает правильно, поскольку он написал это, поскольку скобки и запятые находятся в t он в одном и том же месте. Он просто заменяет скобки и запятые тем же символом. Это отбрасывает счет замены, но это часто не используется. – cjm

ответ

1

Там нет стандартного метода для этого. Вы можете сделать это, итерации по каждому символу в вашей строке ввода и использование словаря для сопоставления его другому персонажу (или оставить его неизменным, если символ не найден в словаре). Результат может быть построен с использованием StringBuilder по соображениям производительности.

Если производительность не является проблемой, то вы можете быть в состоянии использовать несколько вместо замены операции:

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

Как я уже сказал, я не пытаюсь воспроизвести поведение этого самого примера, но я просто хотел, чтобы теперь, если бы существовала аналогичная конструкция :) –

+0

@CFP: Тогда ответ отрицательный, но вы можете написать его самостоятельно, используя метод, который я описал в своем ответе (первый абзац). –

0

Вот один из способов сделать это:

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

Смежные вопросы