Mar*_*ark 11 ruby string delimiter
举个例子,我有一个像这样的字符串:
options = "Cake or pie, ice cream, or pudding"
Run Code Online (Sandbox Code Playgroud)
我希望能够通过分割字符串or,,和, or.
问题是,我能够做到这一点,但只能通过解析,和, or第一次,然后拆分每个数组项,然后将or结果数组展平:
options = options.split(/(?:\s?or\s)*([^,]+)(?:,\s*)*/).reject(&:empty?);
options.each_index {|index| options[index] = options[index].sub("?","").split(" or "); }
Run Code Online (Sandbox Code Playgroud)
结果数组是这样的: ["Cake", "pie", "ice cream", "pudding"]
是否有更高效(或更简单)的方法将我的字符串拆分为这三个分隔符?
mab*_*ako 15
以下内容如何:
options.gsub(/ or /i, ",").split(",").map(&:strip).reject(&:empty?)
Run Code Online (Sandbox Code Playgroud)
,, ice cream可能会留下像领先空间这样的东西首先,您的方法可以简化一点Array#flatten:
>> options.split(',').map{|x|x.split 'or'}.flatten.map(&:strip).reject(&:empty?)
=> ["Cake", "pie", "ice cream", "pudding"]
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用单个正则表达式:
>> options.split /\s*, or\s+|\s*,\s*|\s+or\s+/
=> ["Cake", "pie", "ice cream", "pudding"]
Run Code Online (Sandbox Code Playgroud)
您可以|在正则表达式中使用它来提供替代方案,并, or首先保证它不会产生空项.使用正则表达式捕获空白可能最有效,因为您不必再次扫描数组.
正如Zabba指出的那样,您可能仍想拒绝空项目,提示此解决方案:
>> options.split(/,|\sor\s/).map(&:strip).reject(&:empty?)
=> ["Cake", "pie", "ice cream", "pudding"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11947 次 |
| 最近记录: |