c#替换文本文件中的字符串
我想在文本文件中替换字符串。
我使用以下代码:
string text = File.ReadAllText(@"c:\File1.txt"); text = text.Replace("play","123"); File.WriteAllText(@"c:\File1.txt", text);
它不仅将“播放”改为“123”,还将“显示”改为“dis123”
如何解决这个问题?
你可以在这里利用“正则表达式”。
\b
匹配单词边界,这将解决您的问题。
text = Regex.Replace(text, @"\bplay\b","123");
阅读更多关于正则表达式
您可以使用以下代码段
var str = File.ReadAllText(@"c:\File1.txt"); var arr = str.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries).ToList(); for (int i = 0; i < arr.Count; i++) { if (arr[i].StartsWith("play")) { arr[i] = arr[i].Replace("play", "123"); } } var res = string.Join(" ", arr); File.WriteAllText(@"c:\File1.txt", result);
此外,这是区分大小写,请确保这是您想要的。
另一种方法,而不是基于正则表达式的方法可能如下:
定义一些扩展方法:
static class Exts { public static string GetLettersAndDigits(this string source) { return source.Where(char.IsLetterOrDigit) .Aggregate(new StringBuilder(), (acc, x) => acc.Append(x)) .ToString(); } public static string ReplaceWord(this string source, string word, string newWord) { return String.Join(" ", source .Split(new string[] { " " }, StringSplitOptions.None) .Select(x => { var w = x.GetLettersAndDigits(); return w == word ? x.Replace(w, newWord) : x; })); } }
用法:
var input = File.ReadAllText(@"C:\test.txt"); var output = input.ReplaceWord("play", "123"); Console.WriteLine(input); Console.WriteLine(output);
打印:
这是一个测试:显示播放,播放显示 – 播放 – 播放 – 也许它正在运行?
这是一个测试:显示123,123显示-123!123 – 也许它正在工作?
尝试将其更改为
text.Replace(" play ","123");
但这样它就不会取代像play. play, play;
这样的东西play. play, play;
play. play, play;
在这种情况下您可以使用的另一种技术是在您要编辑的文本中添加更多可识别的令牌。例如:
bla bla {PLAY} bla bla PLAY bla bla
会成为
bla bla 123 bla bla PLAY bla bla