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

如何在Ruby中用正则将字符串分割为符合规则的单词数组?

解决字符串按多规则拆分单词的问题

我明白你的问题了——你的正则现在会把连续大写字母拆成单个字符,这是因为(?=[A-Z]+)会在每个大写字母前插入拆分点,哪怕这些大写字母是连在一起的。咱们来调整正则,同时满足所有规则,甚至可以让逻辑更简洁:

修改思路

针对你的需求,我们需要调整拆分逻辑,覆盖所有规则:

  • 分隔符处理:用[-_.\s]+匹配连续的连字符、空格、下划线和句点,确保连续分隔符只触发一次拆分
  • 大小写拆分:只在两种合理的位置拆分:
    1. 小写字母紧跟大写字母的位置(比如theQuick中e和Q之间),对应规则3
    2. 大写字母紧跟「大写+小写」组合的位置(比如ABCDef中C和D之间),对应规则4,保证连续大写字母被归为一组

修改后的代码

class String
  def split_words
    split(/[-_.\s]+|(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/)
      .map(&:downcase)
      .reject(&:empty?)
  end
end

测试验证

用你的测试用例验证:

"theQuick--brown_fox JumpsOver___the.lazy DOG".split_words
# 返回:["the", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"]

其他场景测试:

  • "DOG".split_words → ["dog"](连续大写字母归为一组)
  • "LETS_GO".split_words → ["lets", "go"](符合规则4)
  • "the--.quick".split_words → ["the", "quick"](连续分隔符只拆分一次)
  • "theQuickBrown".split_words → ["the", "quick", "brown"](符合规则3)

这个实现完全满足你列出的所有规则,而且只用正则完成了核心拆分逻辑。

内容的提问来源于stack exchange,提问作者Josh Hadik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:08:44