2011-03-18 23 views
0

右鍵說我有一個字符串,如{i|we|my friends} are {just|about} to go {walmart|asda|best buy}我希望能夠隨機選擇{}中的任何單詞,這些單詞由|分開,這裏是我目前爲止的內容它只適用於一個{}我需要它爲多個{}的句子工作。用於匹配{word1 | word2}格式的文本的函數

Function UnspinWork(ByVal SpunWords As String) As String 
    Dim upperBound As Integer 
    Dim Random As New Random() 
    Dim ChosenSpunString As String 
    SpunWords = Replace(SpunWords, "{" & "}", "") 
    upperBound = Split(SpunWords, "|").Count 
    ChosenSpunString = Split(SpunWords, "|")(Random.Next(0, upperBound)) 
    Return ChosenSpunString 
End Function 

感謝

+0

什麼你的問題? – 2011-03-18 09:08:57

+0

嗯,這隻適用於一個單詞,如果我發送一個多重{word1 | word2}一些文本{word1 | word2}它只會分裂第一個{ – user393273 2011-03-18 09:11:23

回答

0

使用正則表達式查找所有{}部分。然後使用Regex.Replace方法,使用MatchEvaluator來指定什麼是替換。 在這個MatchEvaluator中,您可以添加隨機選擇的邏輯。

在C#(對不起,不用於VB),你可以這樣做:

class SpunWords 
{ 
    static Random rnd = new Random(); 
    static void Main() 
    { 
     var source = "{i|we|my friends} are {just|about} to go {walmart|asda|best buy}"; 

     var pattern = @"\{(?<values>[^\}]*)\}"; 

     var result = Regex.Replace(
      source, 
      pattern, 
      (m) => Rand(m.Groups["values"].Value) 
      ); 

     Console.WriteLine(result); 

     Console.ReadLine(); 
    } 
    private static string Rand(string value) 
    { 
     var parts = value.Split('|'); 
     return parts[rnd.Next(parts.Length)]; 
    } 
} 
0

我只是轉換史蒂夫B的從C#到vb.net(幸運的是,我知道C#)

Class SpunWords 
    Shared rnd As New Random() 
    Private Shared Sub Main() 
     Dim source = "{i|we|my friends} are {just|about} to go {walmart|asda|best buy}" 

     Dim pattern = "\{(?<values>[^\}]*)\}" 

     Dim result = Regex.Replace(source, pattern, Function(m) Rand(m.Groups("values").Value)) 

     Console.WriteLine(result) 

     Console.ReadLine() 
    End Sub 
    Private Shared Function Rand(value As String) As String 
     Dim parts = value.Split("|"C) 
     Return parts(rnd.[Next](parts.Length)) 
    End Function 
End Class 
相關問題