разделить слово в рубине для подсчета - PullRequest
5 голосов
/ 06 апреля 2011

Когда я разделяю строку "hello world / n" с помощью

"hello world \n".scan(/\w+/)

, я получаю ["hello", "world"]

Я хотел бы также считать \ n или \ t в качестве строки.

Ответы [ 6 ]

5 голосов
/ 06 апреля 2011

Хочешь что-нибудь подобное?

"hello world \n".scan(/\w+|\n/)
4 голосов
/ 27 сентября 2013

Делать не использовать \w+ для подсчета слов.Он будет разделять числа и слова с помощью Unicode следующим образом:

"The floating point number is 13.5812".scan /\w+/
=> ["The", "floating", "point", "number", "is", "13", "5812"]

То же самое верно для чисел с другими разделителями, такими как "12,000".

В Ruby 1.8 выражение w+ работает с Unicode, это изменилось.Если в вашей строке есть символы Юникода, слово тоже будет разделено.

"Die Apfelbäume".scan /\w+/
=> ["Die", "Apfelb", "ume"]

Здесь есть два варианта.

  1. Вы хотите пропустить номера в целом.Хорошо, просто используйте

    /\p{Letter}+/
    
  2. Вы не хотите пропускать числа, потому что вы тоже хотите считать их словами.Затем используйте

    /\S+/
    

    Выражение \S+ будет совпадать на непробельных символах /[^ \t\r\n\f]/.Единственным недостатком является то, что к вашим словам будут прикреплены другие символы.Как скобки, дефисы, точки и т. Д. С единственной целью подсчета это не должно быть проблемой.

    Если вы тоже хотите иметь слова.Тогда вам нужно будет применить дополнительное удаление символов.

3 голосов
/ 06 апреля 2011

В строках \n имеет особое значение: он развивается до каретного возврата, который считается пробелом.Вы должны избегать обратной косой черты: \\n.

Если вы хотите разбить вашу строку только на пробелы, вы должны использовать

"Hello world \n".split(/ /)
2 голосов
/ 07 апреля 2011
"hello world \n".scan /[\w\n\t]+/
1 голос
/ 25 февраля 2013

Это лучше, если вы не хотите разделять слова апострофами (нет, 90-е и т. Д.)

"hello world \n".split(/[^\w']+/)
0 голосов
/ 19 апреля 2011

Вы можете использовать именованный класс символов [: cntrl:].

irb(main):001:0> "hello world \n".scan(/\w+|[[:cntrl:]]/)
=> ["hello", "world", "\n"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...