Everyday Scripting with Ruby 读书笔记(3)

[size=small]---
利器在手,正则表达式
Our Friend, the Regular Expression
---[/size]

[color=indigo][b]each: 返回初始数组, collect: 收集代码块执行值返回新数组..[/b][/color]
irb(main):045:0> [1, 2, 3].each do | ele |
irb(main):046:1* ele * 100
irb(main):047:1> end
=> [1, 2, 3]
irb(main):048:0> [1, 2, 3].collect do | ele |
irb(main):049:1* ele * 100
irb(main):050:1> end
=> [100, 200, 300]

[color=indigo][b]特殊字符+: 匹配字符一次或多次..[/b][/color]
irb(main):054:0> /o+/ =~ "google"
=> 1

[color=indigo][b]特殊字符*: 匹配字符零次或多次..[/b][/color]
irb(main):078:0> /go*gle/ =~ "google"
=> 0

[color=indigo][b]\d: 匹配数字..[/b][/color]
irb(main):055:0> /\d yuan/ =~ "20 yuan"
=> 1

[color=indigo][b]\w: 匹配单词字符(包括字母, 数字, 下划线)..[/b][/color]
irb(main):079:0> /\w+/ =~ "google"
=> 0
irb(main):080:0> /\w+/ =~ "12345"
=> 0
irb(main):081:0> /\w+/ =~ "@"
=> nil

[color=indigo][b]match消息: 若存在匹配返回MatchData对象, 它的第零个元素为第一个匹配的子串..[/b][/color]
irb(main):057:0> match = /\d yuan/.match("I have 20 yuan")
=> #<MatchData:0xdd363ac>
irb(main):058:0> match[0]
=> "0 yuan"
irb(main):059:0> match[1]
=> nil

[color=indigo][b]圆括号: 括住部分为分组, 通过MatchData对象访问..[/b][/color]
irb(main):061:0> match = /have (\d+) yuan/.match("I have 20 yuan")
=> #<MatchData:0xdd2af20>
irb(main):062:0> match[0]
=> "have 20 yuan"
irb(main):063:0> match[1]
=> "20"
irb(main):064:0> match[2]
=> nil

[color=indigo][b]sort方法: 默认按升序排列..[/b][/color]
irb(main):067:0> [2, 3, 1].sort
=> [1, 2, 3]
irb(main):068:0> ['dog', 'cat', 'tiger', 'fox'].sort
=> ["cat", "dog", "fox", "tiger"]

[color=indigo][b]太空船操作符<=>: 如果已按正确次序排列返回-1, 否则返回1, 这里代码块进行求反操作以实现降序排列..[/b][/color]
irb(main):069:0> [2, 3, 1].sort do | one, another |
irb(main):070:1* - (one <=> another)
irb(main):071:1> end
=> [3, 2, 1]

# Exercises

def rearrange(england_name)
has_middlename = /(\w+), (\w+) (\w+)/.match(england_name)
hasnot_middlename = /(\w+), (\w+)/.match(england_name)

if(has_middlename)
lastname = has_middlename[1]
firstname = has_middlename[2]
middlename = has_middlename[3]
"#{firstname} #{middlename[0,1]}. #{lastname}"
elsif(hasnot_middlename)
lastname = hasnot_middlename[1]
firstname = hasnot_middlename[2]
"#{firstname} #{lastname}"
end
end


#---
# Excerpted from "Everyday Scripting in Ruby"
# We make no guarantees that this code is fit for any purpose.
# Visit http://www.pragmaticprogrammer.com/titles/bmsft for more book information.
#---
require 'test/unit'
require 'myexercise'

class RearrangeTests < Test::Unit::TestCase

def test_rearrange_with_middle_name
assert_equal("Dawn E. Marick", rearrange("Marick, Dawn Elaine"))
end

def test_rearrange_without_middle_name
assert_equal("Paul Marick", rearrange("Marick, Paul"))
end

end


[color=blue][b]** 运行结果 **[/b][/color]
>ruby exercise-4-tests.rb
Loaded suite exercise-4-tests
Started
..
Finished in 0.015 seconds.

2 tests, 2 assertions, 0 failures, 0 errors
>Exit code: 0
[color=blue][b]** **[/b][/color]

# Exercises 另一种写法

def rearrange(england_name)
has_or_hasnot_middlename = /(\w+), (\w+)( \w+)?/.match(england_name)

lastname = has_or_hasnot_middlename[1]
firstname = has_or_hasnot_middlename[2]

if(has_or_hasnot_middlename[3])
middlename = has_or_hasnot_middlename[3]
middlename_output = middlename[1,1] + '. ' # middlename的首字符是空格
else
middlename_output = ''
end

"#{firstname} #{middlename_output}#{lastname}"
end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值