我正在尝试替换文本文件中的字符串。
我使用以下代码:
string text = File.ReadAllText(@"c:\File1.txt");
text = text.Replace("play","123");
File.WriteAllText(@"c:\File1.txt", text);
它不仅将“play”一词更改为“123”,还将“display”一词更改为“dis123”
如何解决这个问题?
一种替代方法,而不是基于正则表达式的方法可能如下:
定义一些扩展方法:
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);
印刷:
这是一个测试:显示播放,播放显示 -play !播放 - 也许它正在工作?
这是一个测试: display 123, 123 display -123 !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);
此外,这是区分大小写的,请确保这是您想要的。
尝试将其更改为
text.Replace(" play ","123");
但这样它就不会取代类似的东西play. play, play;
在这种情况下您可以使用的另一种技术是在您希望编辑的文本中添加更多可识别的标记。例如:
bla bla {PLAY} bla bla PLAY bla bla
会成为
bla bla 123 bla bla PLAY bla bla