Как я могу удалить последнюю запятую из строки в Perl - PullRequest
0 голосов
/ 14 октября 2018

У меня есть строка из необработанных данных.Я не могу гарантировать, что может быть или не быть лишней запятой.Я думал, что смогу удалить это так:

$value = "cat, dog, fish, ";

$value =~ s/,//r;

К сожалению, это не работает.Конечно, я мог бы сделать цикл, чтобы проверить последний символ строки один за другим, но я хотел бы узнать, как сделать это с помощью метода обратной косой черты Regex.

Может кто-нибудь помочь мне, пожалуйста?

Ответы [ 6 ]

0 голосов
/ 15 октября 2018

Я предлагаю этот шаблон: ,*\s*$.Он соответствует всем запятым (если есть) и всем пробелам (если есть) и концу строки.

Полный пример:

use 5.18.2;
use strict ;
use warnings ;
use Data::Dumper;

my $data = "cat, dog, fish,,,,,,,,,,,,,                          ";                                                                                   
$data =~ s/,*\s*$// ;
print $data;
0 голосов
/ 15 октября 2018

Используя позитивный взгляд в будущее,

$value =~ s/,(?=[^,]*\z)//;
0 голосов
/ 15 октября 2018

Принятый ответ удаляет запятую, за которой следуют ноль или более пробелов в конце строки.Но вы спрашивали об удалении последней запятой.Любой из них соответствует вашему примеру, но если вы действительно хотите удалить последнюю запятую, один из способов:

$value =~ s/,([^,]*$)/$1/

Это, например, изменит "foo,bar,baz" на "foo,barbaz", and in your example "кошка, собака,рыба, "to" кошка, собака, рыба "` (оставляя в конце).

Трюк reverse в ответе Чорубы также работает.

Если ничего другого, это показываетважность точного постановки задачи.

0 голосов
/ 15 октября 2018

s/,// удаляет первую запятую.Итак,

$value = reverse(reverse($value) =~ s/,//r);
0 голосов
/ 14 октября 2018

Попробуйте это

$value =~ s/,\s*$//;

Шаблон ,\s*$ соответствует запятой (,), за которой следует ноль или более пробелов (\s*), за которыми следует конец строки / ввода($).

0 голосов
/ 14 октября 2018

Не уверен, почему вы указываете / r в своем коде, но не используете возвращаемое значение.Если на самом деле вы используете его, добавьте его обратно.

s/.*\K,//

Ах, если не может быть запятой, которая вам не нужна, это не сработает;это всегда удалит последнюю запятую.Тогда воспользуйся ответом Барта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...