2010-08-21 5 views
2

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

В основном я загружаю веб-страницы и rss-каналы и хочу разделить все, кроме простых слов. Нет периодов, запятых, if, ands и buts. Буквально у меня есть список самых распространенных слов, используемых на английском языке, и я также хочу их разбить, но я думаю, что знаю, как это сделать, и не нужно регулярное выражение, потому что это будет действительно длинный путь.

Как отделить все от фрагмента текста, кроме слов, которые ограничены пробелами? Все остальное идет в мусор.

Это работает достаточно хорошо благодаря Павлу .split(/[^[:alpha:]]/).uniq!

+0

насчет апострофа (или даже апострофа зеленной лавки)? –

+0

не работает. – s84

+0

nokogriri, вероятно, является лучшим решением здесь, потому что это парсер HTML, и я думаю, что не следует использовать регулярное выражение для этого. – s84

ответ

3

Я думаю, что то, что подходит вам лучше всего было бы разделение строки на слова. В этом случае функция String::split будет лучшим вариантом. Он принимает регулярное выражение, которое соответствует подстрокам, которое должно разделять исходную строку на элементы массива.

В вашем случае это должны быть «некоторые неалфавитные символы». Алфавитный код character class обозначается [:alpha:]. Итак, вот пример того, что вам нужно:

irb(main):001:0> "asd, <er>w , we., wZr,fq.".split(/[^[:alpha:]]+/) 
=> ["asd", "er", "w", "we", "wZr", "fq"] 

Вы можете дополнительно отфильтровать результаты по intersecting the resultant array с массивом, который содержит только английские слова:

irb(main):001:0> ["asd", "er", "w", "we", "wZr", "fq"] & ["we","you","me"] 
=> ["we"] 
+0

ничего себе, это выглядит круто. работая над этим сейчас – s84

+0

нормально, что сработало, но я делаю пустые строки в массиве – s84

+0

@Sam, возможно, вы могли найти полезную информацию в документации 'split'? Он должен содержать советы о ситуациях, в которых появляются пустые строки. –