正则表达式(或其他解决方案)获取字符串中的所有单词,包括表情符号和剥离标点符号

时间:2012-07-26 16:04:18

标签: ruby regex parsing string-parsing

例如:

Hello! :)  It's a good day to-day :D  'Aight? <3

它将返回:

  1. 你好
  2. :)
  3. 这是
  4. 一个
  5. 以天
  6. :d
  7. 'Aight
  8. &LT; 3
  9. 有人可能认为所有表情符号都是两个字符长......如果它有帮助,也可能只会遇到“转发”表情符号。

    没有表情符号的情况是微不足道的,但是与它们一起 - 以及删除其他单词的标点符号 - 有点让我感到沮丧。

    除了.split还有一个快速的方法并运行一个块来逻辑检查每个单词吗?

2 个答案:

答案 0 :(得分:1)

以下正则表达式应该找到任何单词(除了短划线/单引号/下划线之外没有标点符号)或2个字符的表情符号:

\s*(?:([a-zA-Z0-9\-\_\']+)|([\:\;\=\[\]\{\}\(\)\<3dDpP]{2}))\s*

正则表达式解释:

\s*                             # any whitespace
(?:
    ([a-zA-Z0-9\-\_\']+)        # any alpha-numeric character, dashes, underscores, single-quotes
    |
    ([\:\;\=\[\]\{\}\(\)\<3dDpP]{2})    # any 2-punctuation marks commonly found in emoticons, including
                                # the number 3, for the <3 and D for :D
)
\s*                             # any whitespace

答案 1 :(得分:0)

它实际上并不是一个正则表达式,而是完成了工作!

"Hello! :)  It's a good day to-day :D  'Aight? <3".split
=> ["Hello!", ":)", "It's", "a", "good", "day", "to-day", ":D", "'Aight?", "<3"]