【问题标题】:Remove a number from a comma separated string while properly removing commas从逗号分隔的字符串中删除数字,同时正确删除逗号
【发布时间】:2010-11-24 22:59:13
【问题描述】:

举个例子:给定一个字符串... "1,2,3,4"

我需要能够删除给定的数字和逗号之后/之前取决于匹配是否在字符串的末尾。

移除(2) = "1,3,4"

删除(4) = "1,2,3"

另外,我正在使用 javascript。

【问题讨论】:

    标签: regex parsing string


    【解决方案1】:

    如 jtdubs 所示,一种简单的方法是使用 split 函数获取不带逗号的元素数组,从数组中删除所需元素,然后使用 join 函数重建字符串。

    对于 javascript,这样的事情可能会起作用:

    function remove(array,to_remove)
    {
      var elements=array.split(",");
      var remove_index=elements.indexOf(to_remove);
      elements.splice(remove_index,1);
      var result=elements.join(",");
      return result;
    }
    
    var string="1,2,3,4,5";
    var newstring = remove(string,"4"); // newstring will contain "1,2,3,5"
    document.write(newstring+"<br>");
    newstring = remove(string,"5"); 
    document.write(newstring+"<br>"); // will contain "1,2,3,4"
    

    如果你有重复,你还需要考虑你想要的行为,比如字符串是“1,2,2,4”,我说“remove(2)”应该删除两个实例还是只删除第一个?此函数将仅删除第一个实例。

    【讨论】:

      【解决方案2】:

      只需使用多个替换。

      s/^$removed,//;
      s/,$removed$//;
      s/,$removed,/,/;
      

      这将比试图发明一个处理所有这些情况的单一替代品更容易。

      【讨论】:

      • 您能否再解释一下?我还不太擅长正则表达式。
      • 嗯,看起来 Javascript 无法轻松插入正则表达式。所以它可以这样做,但它可能会更容易拆分成一个列表,处理该列表,然后重新加入一个字符串(参见@jtdubs)。
      【解决方案3】:
      string input = "1,2,3,4";
      List<string> parts = new List<string>(input.Split(new char[] { ',' }));
      parts.RemoveAt(2);
      string output = String.Join(",", parts);
      

      【讨论】:

      • "1,2,3,4" 只是一个例子。您需要找到能够删除它的值。
      • 如果您想删除数字 2 而不是位置 2 的项目,则将 parts.RemoveAt(2) 更改为 parts.Remove(2)...
      【解决方案4】:

      我不会使用正则表达式,而是执行以下操作:

      - split on comma
      - delete the right element
      - join with comma
      

      这是一个执行这项工作的 perl 脚本:

      #!/usr/bin/perl
      use 5.10.1;
      use strict;
      use warnings;
      
      my $toremove = 5;
      my $string = "1,2,3,4,5";
      
      my @tmp = split/,/, $string;
      @tmp = grep{ $_ != $toremove }@tmp;
      $string =join',', @tmp;
      
      say $string;
      

      输出:

      1,2,3,4
      

      【讨论】:

        【解决方案5】:

        自发布此问题以来,Javascript 已得到改进。 我使用以下正则表达式从 csv 字符串中删除项目

        let searchStr = "359";
        let regex = new RegExp("^" + searchStr + ",?|," + searchStr);
        csvStr = csvStr.replace(regex, "");
        

        如果 child_id 是开始、中间或结束,或者只是替换它的项目。 如果 searchStr 位于 csvStr 的开头,则替换任何尾随逗号。否则,如果 searchStr 位于 csvStr 中的任何其他位置,则它必须以逗号开头,以便 searchStr 及其前面的逗号被替换为空字符串。

        【讨论】:

          猜你喜欢
          • 2019-02-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-09
          • 1970-01-01
          • 2014-02-11
          相关资源
          最近更新 更多