You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby如何从字符串中移除含数字/非法特殊字符的单词并统计有效词数

问题原因

你现有的判断逻辑存在两处漏洞,导致混合了数字和字母的单词没有被过滤:

  1. word !~ /\D/ 仅能匹配完全由数字组成的单词,只要单词中存在任意非数字字符(比如1m里的字母m)就不会触发这条过滤规则
  2. 没有单独判断数字的存在,所以数字+合法字符的组合会被误判为有效单词

修改方案

不需要拆分单词遍历字符,直接通过正则明确合法字符的范围即可,合法单词仅允许包含大小写字母、逗号、问号、句号,其他任何字符(数字、其他特殊符号)出现都判定为非法。

修改后的完整代码如下:

def howMany(sentence)
    if sentence.is_a? String
        words = sentence.split
        test_output = []
        # 合法字符正则:仅允许大小写字母、问号、句号、逗号
        valid_pattern = /^[a-zA-Z?. ,]+$/
        words.each do |word|
            test_output << word if word.match?(valid_pattern)
        end
        puts test_output.join(' ')
        puts test_output.size
    else
        puts "请输入有效的字符串"
    end
end

如果不想调整原有逻辑结构,也可以直接在原有的过滤条件中新增数字匹配规则,只要单词中出现任意数字就过滤:

# 原if条件新增 || word =~ /\d/ 即可
if word !~ /\D/ || word =~ /[!@#$%^&*()_+{}\[\]:;'\"\/\\><]/ || word =~ /\d/

内容的提问来源于stack exchange,提问作者Felipe Cruz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:36:04