Ruby如何从字符串中移除含数字/非法特殊字符的单词并统计有效词数
问题原因
你现有的判断逻辑存在两处漏洞,导致混合了数字和字母的单词没有被过滤:
word !~ /\D/仅能匹配完全由数字组成的单词,只要单词中存在任意非数字字符(比如1m里的字母m)就不会触发这条过滤规则- 没有单独判断数字的存在,所以数字+合法字符的组合会被误判为有效单词
修改方案
不需要拆分单词遍历字符,直接通过正则明确合法字符的范围即可,合法单词仅允许包含大小写字母、逗号、问号、句号,其他任何字符(数字、其他特殊符号)出现都判定为非法。
修改后的完整代码如下:
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
相关产品推荐
相关产品推荐

