2008-10-03 22 views
2

什麼是C#中的PHP preg_replace?C#preg_replace?

我有一個字符串數組,我想用另一個字符串數組替換。這裏是PHP中的一個例子。如何在C#中執行類似的操作,而不使用.Replace(「old」,「new」)。

$patterns[0] = '/=C0/'; 
$patterns[1] = '/=E9/'; 
$patterns[2] = '/=C9/'; 


$replacements[0] = 'à'; 
$replacements[1] = 'é'; 
$replacements[2] = 'é'; 
return preg_replace($patterns, $replacements, $text); 

回答

3
public static class StringManipulation 
{ 
    public static string PregReplace(string input, string[] pattern, string[] replacements) 
    { 
     if (replacements.Length != pattern.Length) 
      throw new ArgumentException("Replacement and Pattern Arrays must be balanced"); 

     for (int i = 0; i < pattern.Length; i++) 
     { 
      input = Regex.Replace(input, pattern[i], replacements[i]);     
     } 

     return input; 
    } 
} 

這裏是我會用什麼。喬納森·荷蘭的一些代碼,但不是在C#3.5中,但在C#2.0中:)

Thx all。

2

您正在查看System.Text.RegularExpressions;

using System.Text.RegularExpressions; 

Regex r = new Regex("=C0"); 
string output = r.Replace(text); 

爲了讓PHP的陣列行爲,你有你需要的多個實例的方式`正則表達式

然而,在你的榜樣,你要好得多由.Replace(舊,新)服務,這是比編譯狀態機快得多。

7

真正的男人使用正則表達式,但這裏是它添加到字符串,如果你想它的擴展方法:

public static class ExtensionMethods 
{ 
    public static String PregReplace(this String input, string[] pattern, string[] replacements) 
    { 
     if (replacements.Length != pattern.Length) 
      throw new ArgumentException("Replacement and Pattern Arrays must be balanced"); 

     for (var i = 0; i < pattern.Length; i++) 
     { 
      input = Regex.Replace(input, pattern[i], replacements[i]);     
     } 

     return input; 
    } 
} 

你使用這樣的:

class Program 
    { 
     static void Main(string[] args) 
     { 
      String[] pattern = new String[4]; 
      String[] replacement = new String[4]; 

      pattern[0] = "Quick"; 
      pattern[1] = "Fox"; 
      pattern[2] = "Jumped"; 
      pattern[3] = "Lazy"; 

      replacement[0] = "Slow";    
      replacement[1] = "Turtle"; 
      replacement[2] = "Crawled"; 
      replacement[3] = "Dead"; 

      String DemoText = "The Quick Brown Fox Jumped Over the Lazy Dog"; 

      Console.WriteLine(DemoText.PregReplace(pattern, replacement)); 
     }   
    } 
+0

可愛的輸出...你怎麼管理添加函數字符串雖然? – 2008-10-03 13:52:42

3

可以使用。選擇()(在.NET 3.5和C#3中)以簡化將函數應用於集合的成員。

stringsList.Select(s => replacementsList.Select(r => s.Replace(s,r))); 

你不需要regexp支持,你只需要一個簡單的方法來迭代數組。

0

編輯:Uhg我剛剛意識到這個問題是2.0,但我會離開它,以防您有權訪問3.5。

只是另一個拿Linq的東西。現在我使用List <Char>而不是Char [],但這只是爲了讓它看起來更清潔。數組上沒有IndexOf方法,但List上有一個。我爲什麼需要這個?那麼從我的猜測來看,替換列表和被替換列表之間沒有直接關係。只是索引。

因此,考慮到這一點,你可以用Char []來做到這一點。但是當你看到IndexOf方法時,你必須在它之前添加一個.ToList()。

這樣的:someArray.ToList()的IndexOf

 
    String text; 
    List<Char> patternsToReplace; 
    List<Char> patternsToUse; 

    patternsToReplace = new List<Char>(); 
    patternsToReplace.Add('a'); 
    patternsToReplace.Add('c'); 
    patternsToUse = new List<Char>(); 
    patternsToUse.Add('X'); 
    patternsToUse.Add('Z'); 

    text = "This is a thing to replace stuff with"; 

    var allAsAndCs = text.ToCharArray() 
       .Select 
       (
        currentItem => patternsToReplace.Contains(currentItem) 
        ? patternsToUse[patternsToReplace.IndexOf(currentItem)] 
        : currentItem 
       ) 
       .ToArray(); 

    text = new String(allAsAndCs); 

這只是將文本轉換爲一個字符陣列,通過每一個進行選擇。如果當前字符不在替換列表中,則按原樣發回字符。如果它位於替換列表中,則返回替換字符列表的相同索引中的字符。最後一件事是從字符數組中創建一個字符串。

 
    using System; 
    using System.Collections.Generic; 
    using System.Linq;