gpt4 book ai didi

ruby - 如何在 Ruby 中使用正则表达式将字符串拆分为它包含的单词数组?

转载 作者:数据小太阳 更新时间:2023-10-29 08:16:14 25 4
gpt4 key购买 nike

我正在尝试创建一个正则表达式模式,该模式将根据许多不同的模式和约定将一个字符串拆分为一个单词数组。规则如下:

  1. 它必须在所有破折号、空格、下划线和句点上拆分字符串。
  2. 当上述多个字符同时出现时,它只能拆分一次(因此 'the--.quick' 必须拆分为 ['the', 'quick'] 而不是 ['the', '', ' ', '快速'] )
  3. 它必须在新的大写字母上拆分字符串,同时保持该字母与其对应的单词('theQuickBrown' 拆分为 ['the', 'quick', 'brown']
  4. 它必须将连续的多个大写字母组合在一起('LETS_GO' 必须拆分为 ['lets', 'go'],而不是 ['l', 'e', 't', 's', 'g ', 'o'])
  5. 拆分数组中必须只使用小写字母。

如果它正常工作,下面应该是正确的

"theQuick--brown_fox JumpsOver___the.lazy  DOG".split_words == 
["the", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"]

到目前为止,我几乎已经做到了,唯一的问题是它在每个首都 split ,所以“DOG”.split_words 是 ["d", "o", "g"] 而不是 [ “狗”]

我还在拆分数组上结合使用正则表达式和映射/过滤器来找到解决方案,如果你能告诉我如何摆脱它并只使用正则表达式,我会加分。

这是我目前所拥有的:

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

当调用上述测试中的字符串时返回:

["the", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "d", "o", "g"]

如何更新此方法以满足上述所有规范?

最佳答案

您可以稍微更改正则表达式,这样它就不会在每个大写字母上拆分,而是在每个以大写字母开头的字母序列上拆分。这只涉及在 [A-Z]+

之后放置一个 [a-z]+
string = "theQuick--brown_fox JumpsOver___the.lazy  DOG"
regex = /[_,\-, ,.]|(?=[A-Z]+[a-z]+)/
string.split(regex).reject(&:empty?)
# => ["the", "Quick", "brown", "fox", "Jumps", "Over", "the", "lazy", "DOG"]

关于ruby - 如何在 Ruby 中使用正则表达式将字符串拆分为它包含的单词数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50648471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com