Ruby регулярное выражение, которое разделяется на новую строку, пробел или запятую - PullRequest
2 голосов
/ 14 февраля 2011

Введите:

     f = ["happy days",
         "happy\ndays",
         "happy,days",
         "happy, days"]

     patt = /some_regex/

Мой желаемый результат после разбиения каждой строки в f на patt равен ["happy", "days"].

Большое спасибо!

Ответы [ 6 ]

12 голосов
/ 14 февраля 2011

Попробуйте это как ваш шаблон:

/\W+/

Соответствует любому количеству несловарных символов.

Пример кода:

result = f.map{|s| s.split(/\W+/) }

Посмотрите, как работает онлайн: ideone

5 голосов
/ 14 февраля 2011

Или /[\n ,]+/

3 голосов
/ 14 февраля 2011

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

f.map{ |s| s.split /[,\s]+/}

=> [["happy", "days"], ["happy", "days"], ["happy", "days"], ["happy", "days"]]
1 голос
/ 15 февраля 2011

Цикл по массиву, используя проверку строки String # для поиска слов:

f = [
  "happy days",
  "happy\ndays",
  "happy,days",
  "happy, days"
]

require 'pp'
pp f.map{ |s| s.scan(/\w+/) }

>> [["happy", "days"], ["happy", "days"], ["happy", "days"], ["happy", "days"]]
0 голосов
/ 24 мая 2016

Если вам нужно разделить на «запятая с пробелом» или «перевод строки», попробуйте это

"ваша строка" .replace (/ ^ \ s + $ / mg, '\ n'). Replace (/ (, \ s) | \ n + / gm, '~'). Раскол ( '~')

в основном это конкретное регулярное выражение поможет

/ (\ s) | \ п + / г

0 голосов
/ 15 мая 2013
irb(main):242:0> "a\nb".split(/\n/)
[
    [0] "a",
    [1] "b"
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...