删除以>开头的行在铁轨中

时间:2011-11-21 22:23:52

标签: ruby-on-rails regex

我正在尝试删除任何以字符“>”开头的行在长字符串中(即回复电子邮件)。

在PHP中我会用if语句迭代每一行,在linux中我会尝试使用sed或awk。

什么是最优雅的导轨方法?

3 个答案:

答案 0 :(得分:2)

你可以试试这个:

your_string.gsub(/^\>.+\n/,'')

答案 1 :(得分:0)

它应该按预期工作:

your_string.lines.to_a.reject{|line| line[0] == '>'}.join

答案 2 :(得分:0)

您的问题是暗示输入是一个字符串,包含多行。 您是否希望输出只是一个包含多行的字符串?我假设是的。

使用字符串和数组操作:

str.lines.reject{|x| x =~ /^>/}.join   # this will return a new string, without those ">" lines

或使用正则表达式:

str.gsub(/^>.+\n*/. '')

更好的解决方案:

您需要为正则表达式使用非贪婪的多行匹配模式:

str.gsub(/^>.*?$\n*/m, '')   # by using gsub!() you can modify the string in place

^>匹配你的“>”一行开头的字符

。*?$匹配起始字符后的任何字符,直到行尾(非贪婪)

\ n *匹配换行符本身(如果有的话)(你也想删除它)

正则表达式末尾的“m”表示多行匹配,它将对字符串中的每一行应用RegExp。