gpt4 book ai didi

ruby - 如何使用正则表达式匹配哈希对象中的字符串文字等符号?

转载 作者:太空宇宙 更新时间:2023-11-03 17:52:06 26 4
gpt4 key购买 nike

使用 str 作为散列中的键可以正常工作。

string = 'The dog and cat'
replace = {'dog' => 'woof', 'cat' => 'meow'}
replace.default = 'unknown'

string.gsub(/\w+/, replace)
# => "unknown woof unknown meow"

如何使用 sym 作为哈希键获得相同的结果?

string = 'The dog and cat'
replace = {dog: 'woof', cat: 'meow'}
replace.default = 'unknown'

string.gsub(/\w+/, replace)
# => "unknown unknown unknown unknown" (actual result)
# => "unknown woof unknown meow" using symbols as hash keys? (desired result)

我的一些尝试:

string.gsub(/(\w+)/, replace[:$1])
# => "unknown unknown unknown unknown"

string.split.map(&:to_sym).to_s.gsub(/\w+/, replace)
# => "[:unknown, :unknown, :unknown, :unknown]"

最佳答案

在下面的代码中:

string = 'The dog and cat'
replace = {dog: 'woof', cat: 'meow'}
replace.default = 'unknown'
string.gsub(/\w+/, replace)

您将散列替换,默认值为'unknown'。这意味着,当您从散列 replace 中查找值时,如果该键不存在,则散列将返回您 unknown 作为值。当您以这种方式定义散列时,它将以这种方式工作。

现在 #gsub 方法,给出所有单词匹配,如 'the''dog' 等,但这些字符串都不是哈希 replace 的键,因此正如我上面所说,每次 unknown 时,哈希 replace 都会返回默认值。

记住 - 在散列 replace = {dog: 'woof', cat: 'meow'} 中,键是符号,例如 :dog, :猫。但是 #gsubstring 的形式为您提供了所有匹配项。

因此,要使其正常工作,您需要使用如下代码块:

string = 'The dog and cat'
replace = {dog: 'woof', cat: 'meow'}
replace.default = 'unknown'
string.gsub(/\w+/) { |m| replace[m.to_sym] }
# => "unknown woof unknown meow"

关于ruby - 如何使用正则表达式匹配哈希对象中的字符串文字等符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22692366/

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