Разделение определенной строки с помощью регулярного выражения

#ruby #regex

#ruby #регулярное выражение

Вопрос:

я пытаюсь получить массив, содержащий aaaaa, bbbbb, ccccc в качестве разделенного вывода ниже.

 a_string = "aaaaa[x]bbbbb,ccccc";
split_output a_string.split.split(%r{[,|........] })
  

что я должен был поставить в качестве замены …….. ?

Комментарии:

1. Вы должны указать еще несколько критериев. Например, вы только что добавили , в качестве делителя, но что еще, по-вашему, может быть там?, для текущего примера это сработает "aaaaa[x]bbbbb,ccccc".split(%r{[,|[x]] }) .

Ответ №1:

Нет необходимости в регулярном выражении, когда это просто литерал:

 irb(main):001:0> a_string = "aaaaa[x]bbbbb"
irb(main):002:0> a_string.split "[x]"
=> ["aaaaa", "bbbbb"]
  

Если вы хотите разделить на «открыть скобку … что угодно … закрыть скобку», то:

 irb(main):003:0> a_string.split /[. ?]/
=> ["aaaaa", "bbbbb"]
  

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

 irb(main):001:0> a_string = "aaaaa[x]bbbbb,ccccc"
=> "aaaaa[x]bbbbb,ccccc"
irb(main):002:0> a_string.scan(/((.)2 )/).map(amp;:first)
=> ["aaaaa", "bbbbb", "ccccc"]
  

Редактировать 2: если вы хотите разделить либо на литеральные строки "," , либо "[x]" на:

 irb(main):003:0> a_string.split /,|[x]/
=> ["aaaaa", "bbbbb", "ccccc"]
  

| Часть регулярного выражения позволяет совпадать выражениям с обеих сторон, а обратная косая черта необходима, поскольку в противном случае символы [ и ] имеют особое значение. (Если вы попытаетесь разделить к /,|[x]/ тому времени, она разделится либо на запятую, либо на x символ.)

Комментарии:

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

2. @iwan Я отредактировал свой ответ, но ваш вопрос все еще недостаточно ясен. Какие строки вы ищете? Какие строки будут разделять строки, которые вы ищете.

3. спасибо Phrogz за то, что приложили столько усилий, чтобы помочь мне, в основном вы ответили на мой вопрос.. но они находятся в двух разных кодах (первые два). То, что мне нужно, можно резюмировать как «какое регулярное выражение нужно разделить запятой или [x] в любом случайном предложении».

Ответ №2:

регулярное выражение не требуется, просто используйте "[x]"