| 古有「好记性不如烂笔头」,今有「好记性不如烂指头」。 我从去年就开始接触Ruby,结果到今天用Ruby时还是经常忘记东西,不停去查一些最基本的知识。 所以,还是记些笔记吧,像我这样不是持续在编程的人,勤快地做笔记,下次再用时,就能很好地回顾起来了。 今天准备发布Ubuntu Tweak的新版本,在写Changle Log的时候,我这个懒人采用了从项目主页上复制并用程序语言去格式化成HTML的方式。我想让格式化文本更好更好,比如Bug ID是要连接到具体的URL。 于是我就写了个Ruby脚本,去处理字符串,去用正则匹配且替换。这里做一点笔记,我自己能看懂就好了。 字符串的定义在Python中,可以用 ""、'' 来包括一个字符串,在Ruby中也可以这么做,但是,中间有些不同的地方,Ruby的""里面,可以用 #{xxx} 去包括转义符、变量或是执行语句,但是在 '' 中,则只是纯字符串。 比如 "#{a}\n#{b}" 的真正内容是,a的变量值+换行+b的变量值,而 '#{a}\n#{b}' 的真正内容是就是它本身。 此外,在Python中,可以用 ''' ''' 来定义大块的换行文本,在Ruby中的 ' " 天然支持换行,但是如果碰到大量的转义符怎么办呢?Ruby还提供了另外一个语法:%q{} ,在这个括号里,就可以尽情地放想放的字符了,而不用管各种转义、引号的处理。 字符串的遍历与操作以前在Python,我经常用 for line in string.split("\n") 的形式来处理一行一行的字符串,但是在Ruby中,要换种形式,用 string.split("\n").each do |line| .... end 的形式,这是Ruby中大量使用的Block。 Ruby里处理字符串方便的地方在于,可以行云流水一气呵成,比如: new_line = line.split("\t")[0..3].insert(0, 'LP:').join(' ') 这句话的意思是:把这一行字符串以Tab作为分割符分割成列表,取第1个至第3个成为新的列表,再往这个列表的头中插入一个名为 'LP:' 的字符串,然后再将整个列表以空格为间隔的形式组成新的一行字符串。这样用真是非常爽,在Python中就做不到了。 字符串的切片其外,这里还有一个关于Range的知识,在Python中,对字符串进行切片,比如: string[1:3] 代表从第2个字符开始,第4字结束(不包括第4个) string[:-1] 代表除最后一个以外的所有字符 string[1:] 代表从2个开始的所有字符 而在Ruby,则需要这样: string[1...3] 代表从第2个开始,第4个结束(不包括第4个) string[1..3] 代表从第2个开始,第4个结束(包括第4个) string[0...-1] 代表除最后一个以外的所有字符 string[1..-1] 代表从2个开始的所有字符 可见,Ruby的操作更丰富,但是也容易用错哦~此外,还支持用 string[1, 3] 的形式表示,从第2个开始后,取3个字符。更强大的是,这里还支持Regex匹配而不是下标,这里不多讲,详情见:http://www.ruby-doc.org/core-1.9.3/String.html 字符串的Regex复杂操作一般情况在,我们用sub、gsub(或者加上 ! )的方法就可以用正则(regex)去处理字符串,碰到复杂一点情况时,就可以考虑用block,在block中进入更多的处理。比如下面这段: new_line.sub(/#\d+/) { |match| "#{match}: https://launchpad.net/bugs/#{match[1..-1]}" } 在这里,依然是用sub的方式,但不同的是,这里将match到的内容放在block中进行针对性的处理,而不是在普通方式中处理成一样的。 本次就先做这些笔记,Ruby真是很好很强大,总有一天我写的Ruby代码会超过我写的Python代码。 from I'm TualatriX http://imtx.me/archives/1724.html | |||
| | |||
| | |||
|
0 评论:
发表评论