Ruby 基于开头字符删除文本文件中的行

Ruby 基于开头字符删除文本文件中的行,ruby,Ruby,我有一封电子邮件,看起来像这样: Hey how are you? On Saturday sender@example.com wrote: > something > On Friday sender@example.com wrote: >> previous thing 如何删除以>开头的行以及包含email@example.com编写 我是否应该保留“某人写的”部分,因为这可能会删除合法的行,可能只有在最后一行时才删除该行 我正在尝试: message_fi

我有一封电子邮件,看起来像这样:

Hey how are you?

On Saturday sender@example.com wrote:
> something
> On Friday sender@example.com wrote:
>> previous thing
如何删除以
>
开头的行以及包含
email@example.com编写

我是否应该保留“某人写的”部分,因为这可能会删除合法的行,可能只有在最后一行时才删除该行

我正在尝试:

message_filtered = message_txt.to_s.split("\n").each do |m|
  if m[0] != ">" then
    return m
  end
end

puts message_filtered
我可以将
m
推到一个数组中,然后用
\n
加入该数组,但我正在尝试一种更短的方法。

试试看

message_filtered = message_txt.lines.reject { |line|
  line[0] == '>' || line =~ YOUR_EMAIL_REGEXP
}.join('\n')
要删除以
>
开头的行,可以使用:

message_filtered = message_txt.gsub(/(^>.+)/, '') # should work but not tested
这个怎么样,

> str = "Hey how are you?\nOn Saturday sender@example.com wrote:\n> something\n> On Friday sender@example.com wrote:\n>> previous thing"
> str.split("\n").reject{|msg| msg =~ /^>/ || msg =~ /@example.com/}.join("\n")
 => "Hey how are you?"
我的主张:

message_filtered = '';
message_txt.to_s.lines {|line| message_filtered << line unless line[0] == '>' }
<代码>消息筛选=“”;
message_txt.to_.lines{| line | message_filtered
String.gsub
使用一个简单的正则表达式可以做到这一点:

text = <<EOT
Hey how are you?

On Saturday sender@example.com wrote:
> something
> On Friday sender@example.com wrote:
>> previous thing
EOT

puts text.gsub(/(?:^>|On \w+ sender@example.com wrote:).+\n/m, '')

# => "Hey how are you?\n\n"
text=星期五sender@example.com写的:
>>前事
EOT
将text.gsub(/(?:^>|置于\w+上sender@example.com已写入:)。+\n/m',)
#=>“你好吗?\n\n”

sender@example.com需要是一个简单的电子邮件正则表达式。你要弄清楚这一部分。我只是想说明
gsub
会很好地处理这个问题。干杯,我在正则表达式中尝试了一个正则表达式。info但它在这么多字符后停止注册为正则表达式。但实际上我只需要检查
*@*写:
it should be
message\u filtered=message\u txt.gsub/(^>+)/,''
,在regex
$
中表示行尾。