我正在尝试删除任何以字符“>”开头的行在长字符串中(即回复电子邮件)。
在PHP中我会用if语句迭代每一行,在linux中我会尝试使用sed或awk。
什么是最优雅的导轨方法?
答案 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。