C#中的PHP preg_replace是什么?
我有一个字符串数组,我想用另一个字符串数组替换。这是PHP中的一个例子。如何在不使用.Replace(“old”,“new”)的情况下在C#中执行类似的操作。
$patterns[0] = '/=C0/';
$patterns[1] = '/=E9/';
$patterns[2] = '/=C9/';
$replacements[0] = 'à';
$replacements[1] = 'é';
$replacements[2] = 'é';
return preg_replace($patterns, $replacements, $text);
答案 0 :(得分:7)
真人使用正则表达式,但这里有一个扩展方法,如果你需要它可以将它添加到String:
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));
}
}
答案 1 :(得分:3)
您可以使用.Select()(在.NET 3.5和C#3中)来简化将函数应用于集合的成员。
stringsList.Select( s => replacementsList.Select( r => s.Replace(s,r) ) );
您不需要regexp支持,只需要一种简单的方法来迭代数组。
答案 2 :(得分: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;
}
}
以下是我将要使用的内容。 Jonathan Holland的一些代码,但不是C#3.5,而是C#2.0:)
所有。
答案 3 :(得分:2)
您正在寻找System.Text.RegularExpressions
;
using System.Text.RegularExpressions;
Regex r = new Regex("=C0");
string output = r.Replace(text);
要获得PHP的数组行为,就需要多个`Regex
实例但是,在你的例子中,.Replace(旧的,新的)可以更好地服务,它比编译状态机要快得多。
答案 4 :(得分:0)
编辑:呃我刚刚意识到这个问题是针对2.0的,但我会留下来以防你有权访问3.5。
再一次看看Linq的事情。现在我使用List&lt; Char&gt;而不是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;