【问题标题】:C# replace all occurrences of a character with just a character [duplicate]C#用一个字符替换所有出现的字符[重复]
【发布时间】:2015-02-16 23:53:57
【问题描述】:

假设我有这个字符串,"%%%%%ABC",我想用一个"%" 替换所有"%",所以它应该是"%ABC"

如果是"%%%A%%B%%C%%",应该是"%A%B%C%"

我应该怎么做?

【问题讨论】:

  • 只是% 还是你也有"###A##B#C"
  • 到目前为止,我只处理“%”。我面临的问题是,我有一个程序,用户可以使用 SQL 过滤器过滤值。如果他们输入诸如“%%%%%%%%ABC”而不是“%ABC”之类的内容,我的程序将冻结,当然我会将“%”转换为“.*”以符合正则表达式。

标签: c# string replace


【解决方案1】:

Regex.Replace方法的解决方案:

private static string TruncatePercents(string input)
{
    return Regex.Replace(input, @"%+", "%");
}

【讨论】:

    【解决方案2】:

    这将对其进行排序:

        string ProcessText(string s)
        {
           return Regex.Replace(s, @"%+", "%");
        }
    

    编辑被打败了,所以让我的略有不同并为不同的分隔符提供范围:

        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = ProcessText(textBox1.Text, "%", "#");
        }
    
        string ProcessText(string s, string delim, string replaceWith)
        {
           return Regex.Replace(s, @""+ delim + "+", replaceWith);
        }
    

    【讨论】:

      【解决方案3】:

      如果您想用一个相同的非单词字符替换一个或多个非单词字符,请使用此选项。

      string result = Regex.Replace(str, @"(\W)+", "$1");
      

      【讨论】:

        【解决方案4】:

        试试正则表达式。

                string strTest = "%%%A%%B%%C%%";
                string strPattern = "%+";
                RegexOptions opt = RegexOptions.IgnoreCase;
                var reg = new Regex(strPattern, opt);
                var strReplaceResult = reg.Replace(strTest, "%");
        

        结果将是“%A%B%C%”

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-11-23
          • 1970-01-01
          • 2014-12-23
          • 1970-01-01
          • 1970-01-01
          • 2015-12-24
          • 2018-10-25
          相关资源
          最近更新 更多