我正在尝试使用 Ruby 拆分字符串并计算 os 单词的数量,但我想忽略特殊字符。
例如,在这个字符串“你好,我的名字是 Hugo ...”中,我用空格分隔它,但最后一个 ... 不应该计算在内,因为它不是一个单词。
我正在使用string.inner_text.split(' ').length
. 如何指定特殊字符(例如 ... ? ! 等)在与文本之间用空格分隔时不计算在内?
谢谢大家,亲切的问候,雨果
我正在尝试使用 Ruby 拆分字符串并计算 os 单词的数量,但我想忽略特殊字符。
例如,在这个字符串“你好,我的名字是 Hugo ...”中,我用空格分隔它,但最后一个 ... 不应该计算在内,因为它不是一个单词。
我正在使用string.inner_text.split(' ').length
. 如何指定特殊字符(例如 ... ? ! 等)在与文本之间用空格分隔时不计算在内?
谢谢大家,亲切的问候,雨果
"Hello, my name is não ...".scan /[^*!@%\^\s\.]+/
# => ["Hello,", "my", "name", "is", "não"]
/[^*!@%\^]+/
将匹配除*!@%\^
. 您可以在此列表中添加更多不需要匹配的内容
这是部分答案,部分回应@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:]]+/