例如:
Hello! :) It's a good day to-day :D 'Aight? <3
它会返回:
- 你好
- :)
- 它是
- 一种
- 好的
- 天
- 今天
- :D
- '好吧
- <3
人们可能会认为所有表情符号都是两个字符长......而且,如果有帮助,可能只会遇到“转发”表情符号。
没有表情符号的情况是微不足道的,但有了它们——以及去掉其他单词的标点符号——有点让我绊倒。
除了 .split 和运行一个块来逻辑检查每个单词之外,还有没有一种快速的方法?
例如:
Hello! :) It's a good day to-day :D 'Aight? <3
它会返回:
人们可能会认为所有表情符号都是两个字符长......而且,如果有帮助,可能只会遇到“转发”表情符号。
没有表情符号的情况是微不足道的,但有了它们——以及去掉其他单词的标点符号——有点让我绊倒。
除了 .split 和运行一个块来逻辑检查每个单词之外,还有没有一种快速的方法?
以下正则表达式应该找到任何单词(除了破折号/单引号/下划线之外没有标点符号)或 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
它实际上不是正则表达式,但可以完成工作!
"Hello! :) It's a good day to-day :D 'Aight? <3".split
=> ["Hello!", ":)", "It's", "a", "good", "day", "to-day", ":D", "'Aight?", "<3"]