繁体   English   中英

c#替换文本文件中的字符串

[英]c# replace string in a text file

我想在文本文件中替换字符串。

我使用以下代码:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM