C# - 替换多个文本

时间:2015-07-20 07:09:41

标签: c# text replace

我在替换多个文本时遇到了一些麻烦。 我知道替换文字是:

...Text.Replace("text", "replaced");

我没有关于如何更改多个文本的线索,我尝试了下面的代码,但它没有用,我在网上搜索了一些帮助,但我没有看到任何可以帮助我的东西,所以我做了这个问题。以下是我到目前为止的情况:

string[] List = 
{ 
    "1", "number1",
    "2", "number2",
    "3", "number3",
    "4", "number4",
};
writer.WriteLine(read.
    Replace(List[0], List[1]).
    Replace(List[2], List[3]).
    Replace(List[4], List[5])
    );
writer.Close();

5 个答案:

答案 0 :(得分:6)

你能做的就是这样做:

Dictionary<string, string> replaceWords = new Dictionary<string, string>();
replaceWords.Add("1", "number1");
...

StringBuilder sb = new StringBuilder(myString);

foreach(string key in replaceWords.Keys)
    sb.Replace(key, replaceWords[key]);

这样,您只需要在集合中指定密钥。这将允许您提取替换机制作为一种方法,例如,可以接受字符串字典。

答案 1 :(得分:3)

我会用Linq来解决它:

StringBuilder read = new StringBuilder("1, 2, 3");

Dictionary<string, string> replaceWords = new Dictionary<string, string>();
replaceWords.Add("1", "number1");
replaceWords.Add("2", "number2");
replaceWords.Add("3", "number3");

replaceWords.ForEach(x => read.Replace(x.Key, x.Value));

注意:StringBuilder在这里更好,因为它不会在每次替换操作时在内存中存储新字符串。

答案 2 :(得分:2)

如果您有任何计划可以随时更改的动态替换次数,并且您想让它更清洁,您可以随时执行以下操作:

// Define name/value pairs to be replaced.
var replacements = new Dictionary<string,string>();
replacements.Add("<find>", client.find);
replacements.Add("<replace>", event.replace.ToString());

// Replace
string s = "Dear <find>, your booking is confirmed for the <replace>";
foreach (var replacement in replacements)
{
   s = s.Replace(replacement.Key, replacement.Value);
}

答案 3 :(得分:2)

如果我理解正确,你想要做多次替换而不用再重写ans替换。

我建议写一个方法,它接受一个字符串列表和一个输入字符串,然后遍历所有元素并调用input.replace(replacorList [i])。

据我所知,.NET中的一种方法中没有预先实现多次替换的实现。

答案 4 :(得分:1)

在您的特定情况下,当您想要专门替换数字时,您不应该忘记正则表达式,您可以使用它来执行以下操作:

Regex rgx = new Regex("\\d+");

String str = "Abc 1 xyz 120";

MatchCollection matches = rgx.Matches(str);

// Decreasing iteration makes sure that indices of matches we haven't
// yet examined won't change
for (Int32 i = matches.Count - 1; i >= 0; --i)
    str = str.Insert(matches[i].Index, "number ");

Console.WriteLine(str);

这样你可以替换任何数字(虽然这可能是一个奇怪的需要),但调整正则表达式以满足您的需求应该可以解决您的问题。您还可以指定正则表达式以匹配某些数字,如下所示:

Regex rgx = new Regex("1|2|3|178");

这是一个品味问题,但我认为这比指定 find-replace 对的字典更清晰,但是当你想插入一个前缀或类似东西时你只能使用这个方法就像你在你的例子中那样。如果您必须将 a 替换为 b ,将 c 替换为 d 或其他 - 也就是说,您将替换不同的项目不同的替换 - 你将不得不坚持Dictionary<String,String>方式。