在正确删除逗号的同时从逗号分隔的字符串中删除一个数字

时间:2010-11-24 22:59:13

标签: regex parsing string

例如:给定一个字符串......“1,2,3,4”

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

删除(2)=“1,3,4”

删除(4)=“1,2,3”

另外,我正在使用javascript。

5 个答案:

答案 0 :(得分:3)

正如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”,我说“删除(2)”它应该删除两个实例还是只删除第一个?此函数将仅删除第一个实例。

答案 1 :(得分:2)

只需使用多次替换。

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

这比尝试发明处理所有这些案例的单个替换更容易。

答案 2 :(得分:1)

string input = "1,2,3,4";
List<string> parts = new List<string>(input.Split(new char[] { ',' }));
parts.RemoveAt(2);
string output = String.Join(",", parts);

答案 3 :(得分:0)

而不是使用正则表达式,我会做类似的事情:

- 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

答案 4 :(得分:0)

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

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

如果child_id是开始,中间或结束,或者仅是item,则替换它。 如果searchStr在csvStr的开头,则它将替换所有结尾的逗号。否则,如果searchStr在csvStr中的其他位置,则必须在其前面加上逗号,以便将searchStr及其前面的逗号替换为空字符串。