2014-11-20 8 views
0

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

Пример строка:

test="AM*BE*3***LAST****~" 

Я хотел бы, чтобы обрезать звездочки от только в конце, которые не имеют повторяющиеся символы. Таким образом, полученное значение в переменной будет:

test="AM*BE*3***LAST~" 

В Perl я был в состоянии использовать это:

s/\*+~+/~/; 

Есть ли что-то подобное я могу сделать в Ruby? Я уверен, что есть, просто изо всех сил пытаюсь найти его по какой-то причине. Любая помощь будет принята с благодарностью.

+1

Вы говорите, что '' AM * BE * 3 *** LAST **** "' не следует подрезать? Ответы предполагают, что последний символ '~'. Должно быть, это жестко, или может за последним чередом аскеров следовать какие-либо символы, кроме звездочек? –

ответ

2

Вы могли бы использовать это регулярное выражение:

/\*+~$/ 

Затем используйте метод gsub заменить все матчи с тильдой ~:

test = "AM*BE*3***LAST****~" 

test.gsub!(/\*+~$/, '~') 
# => "AM*BE*3***LAST~" 

Или вы могли бы использовать это более гибкое регулярное выражение, которое соответствует любому количество знаков после * до конца строки:

/\*+([^*])+$/ 

Затем с помощью первого захвата группы ($1) в качестве замены:

test.gsub(/\*+([^*])+$/) { $1 } 
+0

Это сработало отлично. Спасибо! – MechDog

+0

Мне нравится, если последний символ изменяется, в этом случае он не будет с момента его окончания индикатора строки, поэтому всегда будет тильда. Его часть формата ASC X12, который был выбран Конгрессом, «упростил» обмен данными между компаниями для страхования. – MechDog

1

Вы можете использовать Rubular и попытаться проверить регулярное выражение и добиться того, что вам нужно на основе ссылок вниз страницы.

http://rubular.com/

+0

Я проверю это, спасибо! – MechDog

+0

Хороший комментарий! .. –

2

класс Строка в Ruby имеет [] метод, который позволяет нам использовать регулярное выражение в качестве параметра. Мы также можем приписать, что позволяет нам делать такие вещи, как:

foo = "AM*BE*3***LAST****~" 
foo[/\*+~+$/] = '~' 
foo # => "AM*BE*3***LAST~" 

Это повторно шаблон матча из поиска Perl/замены. (Я предполагаю, что вы только хотите совместить в конце строки из-за ваших примеров. Если это должно быть где угодно в строке, удалите конечный $ из рисунка.)

Смежные вопросы