Удалите число из строки, разделенной запятыми, при правильном удалении запятых - PullRequest
0 голосов
/ 25 ноября 2010

ДЛЯ ПРИМЕРА: Учитывая строку ... "1,2,3,4"

Мне нужно иметь возможность удалить заданное число и запятую после / до зависимостивключен, если совпадение находится в конце строки.

remove (2) = "1,3,4"

remove (4) = "1,2,3"

Также я использую JavaScript.

Ответы [ 4 ]

3 голосов
/ 25 ноября 2010

Как показывает 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) "это должно удалить оба экземпляра или только первый?эта функция удалит только первый экземпляр.

2 голосов
/ 25 ноября 2010

Просто используйте несколько замен.

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

Это будет проще, чем пытаться изобрести одну замену, которая обрабатывает все эти случаи.

1 голос
/ 25 ноября 2010
string input = "1,2,3,4";
List<string> parts = new List<string>(input.Split(new char[] { ',' }));
parts.RemoveAt(2);
string output = String.Join(",", parts);
0 голосов
/ 25 ноября 2010

Вместо использования регулярных выражений я бы сделал что-то вроде:

- 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
...