2010-07-24 57 views
1

在Perl中,你可以寫在VB.Net中使用perl regex構造?

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

例如。

是否有可能實現與VB.Net正則表達式相同的「翻譯」效果?

謝謝你!

PS:我不是在尋找一種方式來港這個非常例子,它更多的是好奇的問題:)

+1

這個例子更簡潔,寫成'$ string =〜tr/aeiouy/AEIOUY /;' – mob 2010-07-24 22:16:25

+1

令人驚訝的是,它在寫它時正常工作,因爲括號和逗號都是t他在兩個字符串中的相同位置。它只是用相同的字符替換括號和逗號。這確實帶來了更換計數,但這通常沒有使用。 – cjm 2010-07-25 01:31:01

回答

1

的沒有標準的方法這一點。您可以通過遍歷輸入字符串中的每個字符並使用字典將其映射到另一個字符(或者如果在字典中未找到該字符,則保持不變)來完成此操作。出於性能原因,可以使用StringBuilder來構建結果。

如果性能是不是一個問題,那麼你可能能夠使用一些替代操作來代替:

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

正如我所說,我不想複製這個例子的行爲,但我只是想現在如果有一個類似的構造:) – 2010-07-24 22:16:46

+0

@CFP:然後答案是否定的,但你可以自己寫一個我在答覆中描述的方法(第一段)。 – 2010-07-24 22:18:24

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