1

我正在尝试使用 Ruby 拆分字符串并计算 os 单词的数量,但我想忽略特殊字符。

例如,在这个字符串“你好,我的名字是 Hugo ...”中,我用空格分隔它,但最后一个 ... 不应该计算在内,因为它不是一个单词。

我正在使用string.inner_text.split(' ').length. 如何指定特殊字符(例如 ... ? ! 等)在与文本之间用空格分隔时不计算在内?

谢谢大家,亲切的问候,雨果

4

2 回答 2

6
 "Hello, my name is não ...".scan /[^*!@%\^\s\.]+/
 # => ["Hello,", "my", "name", "is", "não"] 

/[^*!@%\^]+/将匹配除*!@%\^. 您可以在此列表中添加更多不需要匹配的内容

于 2013-08-19T14:11:29.763 回答
1

这是部分答案,部分回应@Neo 的答案:为什么不使用适当的工具来完成这项工作?

http://www.ruby-doc.org/core-1.9.3/Regexp.html说:

POSIX 括号表达式也类似于字符类。它们为上述内容提供了一种可移植的替代方案,另外还有一个好处是它们包含非 ASCII 字符。例如,/\d/ 仅匹配 ASCII 十进制数字 (0-9);而 /[[:digit:]]/ 匹配 Unicode Nd 类别中的任何字符。

  • /[[:alnum:]]/ - 字母和数字字符
  • /[[:alpha:]]/ - 字母字符
  • ...

Ruby 还支持以下非 POSIX 字符类:

  • /[[:word:]]/ - 下列 Unicode 通用类别之一中的字符 Letter、Mark、Number、Connector_Punctuation

你想要的话,使用str.scan /[[:word:]]+/

于 2013-08-19T14:42:38.590 回答