Ruby 使用正则表达式将数字更改为字符

Ruby 使用正则表达式将数字更改为字符,ruby,regex,string,Ruby,Regex,String,我正在尝试将字符串转换为在单词之间包含连字符(-),并更改为小写。例如: 从'ThisIsMyString'到'this-is-my-string' 这是我目前的代码: def kebabize(str) str.gsub(/(?=[A-Z])/, '-').downcase end 我还需要它从字符串中删除数字。例如: 从“有三个词”到“有三个词” 要做到这一点,我需要向代码中添加什么?用[A-Z][A-Z]+(?=[A-Z]|\b)来捕获这一点的正则表达式 见: 说明: 阅读以大

我正在尝试将字符串转换为在单词之间包含连字符(-),并更改为小写。例如:

  • 'ThisIsMyString'
    'this-is-my-string'
这是我目前的代码:

def kebabize(str)
 str.gsub(/(?=[A-Z])/, '-').downcase
end
我还需要它从字符串中删除数字。例如:

  • “有三个词”
    “有三个词”

要做到这一点,我需要向代码中添加什么?

用[A-Z][A-Z]+(?=[A-Z]|\b)来捕获这一点的正则表达式 见:

说明: 阅读以大写字母([A-Z])开头的“word”,然后是几个小写字母([A-Z]+),直到遇到大写字母[A-Z]或\b为止

在代码中,您省略了边界选项,因为这不需要替换:

def addMinus(str)
  str.gsub(/([A-Z][a-z]+(?=[A-Z]))/, "\\1-")
end

print addMinus('ThisIsMyString'), "\n"

只需将另一个
gsub
包裹起来:

def kebabize(str)
 str.gsub(/\d+/, '').gsub(/(?=[A-Z])/, '-').downcase
end

同意使用
\d+
删除了我的答案而支持这一个。就像@Jan,即使你比我更欣赏一个不同的解决方案,也没有必要否决一个完美有效的解决方案。如果你这样做了,请告诉我们原因,这样我们都可以从你的观点/知识中受益。