【发布时间】:2010-11-24 22:59:13
【问题描述】:
举个例子:给定一个字符串... "1,2,3,4"
我需要能够删除给定的数字和逗号之后/之前取决于匹配是否在字符串的末尾。
移除(2) = "1,3,4"
删除(4) = "1,2,3"
另外,我正在使用 javascript。
【问题讨论】:
举个例子:给定一个字符串... "1,2,3,4"
我需要能够删除给定的数字和逗号之后/之前取决于匹配是否在字符串的末尾。
移除(2) = "1,3,4"
删除(4) = "1,2,3"
另外,我正在使用 javascript。
【问题讨论】:
如 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)”应该删除两个实例还是只删除第一个?此函数将仅删除第一个实例。
【讨论】:
只需使用多个替换。
s/^$removed,//;
s/,$removed$//;
s/,$removed,/,/;
这将比试图发明一个处理所有这些情况的单一替代品更容易。
【讨论】:
string input = "1,2,3,4";
List<string> parts = new List<string>(input.Split(new char[] { ',' }));
parts.RemoveAt(2);
string output = String.Join(",", parts);
【讨论】:
我不会使用正则表达式,而是执行以下操作:
- 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
【讨论】:
自发布此问题以来,Javascript 已得到改进。 我使用以下正则表达式从 csv 字符串中删除项目
let searchStr = "359";
let regex = new RegExp("^" + searchStr + ",?|," + searchStr);
csvStr = csvStr.replace(regex, "");
如果 child_id 是开始、中间或结束,或者只是替换它的项目。 如果 searchStr 位于 csvStr 的开头,则替换任何尾随逗号。否则,如果 searchStr 位于 csvStr 中的任何其他位置,则它必须以逗号开头,以便 searchStr 及其前面的逗号被替换为空字符串。
【讨论】: