我无法找出解析特定字符串集的最佳方法。
我将会遇到的一些字符串示例是:
str = 'name[key1][key2][key3]'
str2 = 'name[key1]'
str3 = 'name'
以下是我希望摆脱字符串的各个数组:
arr1 = ['name', 'key1', 'key2', 'key3']
arr2 = ['name', 'key1']
arr3 = ['name']
正如您所看到的,密钥是可选的,可以是变量计数。
我能来的最接近的是:
>> str = 'name[key1][key2][key3]'
"name[key1][key2][key3]"
>> str.scan(/(.+?)(\[.+?\])/)
[["name", "[key1]"], ["[key2]", "[key3]"]]
所以,我总是可以在该数组上做一个flatten,然后用gsub来摆脱括号,但我不想只是将它们一起破解。我希望能够一次完成它。我认为只是在括号中进行了一个字符串拆分,但这似乎也是一种绑定方法。如果有人有关于我如何比正则表达式更好地完成这一点的想法,或者我如何使用我正在使用的方法正确地完成这一点,那就太棒了!
答案 0 :(得分:1)
您可以使用scan
并忽略括号:
str = 'name[key1][key2][key3]'
p str.scan(/[^\[\]]+/)
#=> ["name", "key1", "key2", "key3"]
str2 = 'name[key1]'
p str2.scan(/[^\[\]]+/)
#=> ["name", "key1"]
str3 = 'name'
p str3.scan(/[^\[\]]+/)
#=> ["name"]
答案 1 :(得分:0)
您可以使用正向前瞻/后瞻来查找可能存在的括号,但将其从匹配中排除。然后,您根本不必使用gsub
或flatten
:
str = 'name[key1][key2][key3]'
p str.scan(/(?<=\[)?\w+(?=\])?/)
# => ["name", "key1", "key2", "key3"]
在Ruby Docs中了解有关Regexp类的更多信息。
答案 2 :(得分:0)
使用split ??
str = 'name[key1][key2][key3]'
print str.split(/[\[\]]+/)
答案 3 :(得分:0)
这对你有用:
str.tr('[]', ' ').split
将'['
和']'
同时更改为' '
,然后拆分' '
如果需要更改为' '
的字符数增加,则将tr()更改为gsub()并相应地修改参数