【问题标题】:c# replace string in a text filec#替换文本文件中的字符串
【发布时间】:2013-10-27 07:21:28
【问题描述】:

我正在尝试替换文本文件中的字符串。

我使用以下代码:

string text = File.ReadAllText(@"c:\File1.txt");
text = text.Replace("play","123");
File.WriteAllText(@"c:\File1.txt", text);

它不仅将“play”一词改为“123”,还将“display”一词改为“dis123”

如何解决这个问题?

【问题讨论】:

    标签: c# replace


    【解决方案1】:

    您可以在这里利用“正则表达式”。

    \b匹配单词边界,这将解决你的问题。

    text = Regex.Replace(text, @"\bplay\b","123");
    

    阅读更多关于Regular expressions

    【讨论】:

      【解决方案2】:

      你可以使用以下sn-ps的代码

      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);
      

      此外,这是区分大小写的,请确保这是您想要的。

      【讨论】:

        【解决方案3】:

        一种替代方法,而不是基于正则表达式的方法可能如下:

        定义几个扩展方法:

        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);
        

        打印:

        这是一个测试:display play, play display -play !play - 也许它正在工作?

        这是一个测试:显示 123、123 显示 -123 !123 - 也许它正在工作?

        【讨论】:

          【解决方案4】:

          试试改成

          text.Replace(" play ","123");
          

          但这样它不会取代像play. play, play;这样的东西

          【讨论】:

          • 你也会用这个答案丢失单词两边的空格 - 下面的正则表达式答案更好,但如果你使用这种方法,请务必将“play”替换为“123”,不是“123”。
          【解决方案5】:

          在这种情况下您可以使用的另一种技术是在您要编辑的文本中添加更多可识别的标记。例如:

          bla bla {PLAY} bla bla PLAY bla bla
          

          会变成

          bla bla 123 bla bla PLAY bla bla
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-05-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-30
            • 2017-08-28
            • 1970-01-01
            相关资源
            最近更新 更多