新手问题 关于 version 1.9 之后废弃了 String 类的 grep 实例方法后的如何实现相同功能

leeco · 2012年09月18日 · 最后由 lxyluu 回复于 2012年09月18日 · 3402 次阅读

在版本 1.9 之前 String 有 grep 实例方法,我可以使用下面的代码通过正则表达式分离出一个字符串里的多个模式匹配串并通过在传人的 block 中使用$1,$2...对匹配的字符串进行处理,但 1.9 之后废弃了 String 的 grep 方法,现在如何处理最方便。 例如下面的代码 [code] "Hello world".grep(/^(\w+) (\w+)$/) { puts "First word is "+$1+", second word is "+$2+"." } [/code] 会输出 First word is 'Hello', second word is 'world'. 在 1.9 之后应该如何编写对应的代码。

如果使用 puts "First word is "+"Hello world"[/^(\w+) (\w+)$/, 1]+", second word is "+"Hello world"[/^(\w+) (\w+)$/, 2]+"." 明显代码变得累赘了,即使先将"Hello world"赋给一个变量,这个变量名还是会在下面出现 2 次,模式串也要出现 2 次,事实上匹配也做了 2 次,岂不是开销也是原来使用 grep 的 2 倍,那有没有更简洁的方法呢? 如果没有更简洁的方法废除原有 grep 方法的意义何在?

如果想选出匹配的行可以

str.split("\n").grep(/pattern/)

如果象你的例子抽取信息的话用 scan

#1 楼 @doitian 嗯,原来有 scan 这个方法,我查了一下 1.9 之前也是有这个方法的,谢谢

这个还可以

需要 登录 后方可回复, 如果你还没有账号请 注册新账号