2012-02-17 4 views
3

у меня есть сообщение электронной почты, который выглядит следующим образом:Удаление строк в текстовом файле на основе первых символов

Hey how are you? 

On Saturday [email protected] wrote: 
> something 
> On Friday [email protected] wrote: 
>> previous thing 

Как бы я удалить строки, которые начинаются с >, а также линии, которые включают [email protected] wrote

Должен ли я содержать часть «кто-то написал», поскольку это могло бы удалить законные строки, возможно, только удаление этой строки, если это последняя строка.

Я пытаюсь это:

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

puts message_filtered 

Я мог бы подтолкнуть m в массив, а затем присоединиться к этому массиву с \n, но я пытаюсь более короткий путь.

ответ

3

Попробуйте

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 
+1

Он должен быть 'message_filtered = message_txt.gsub /(^>.+)/, '' ', в регулярное выражение' '$ указывает на конец строки. – nkm

+0

Да, я всегда их смешиваю. – Hauleth

1

Как об этом,

> str = "Hey how are you?\nOn Saturday [email protected] wrote:\n> something\n> On Friday [email protected] wrote:\n>> previous thing" 
> str.split("\n").reject{|msg| msg =~ /^>/ || msg =~ /@example.com/}.join("\n") 
=> "Hey how are you?" 
2

мое предложение:

message_filtered = ''; 
message_txt.to_s.lines {|line| message_filtered << line unless line[0] == '>' } 
0

String.gsub с помощью простого регулярного выражения можно сделать следующее:

text = <<EOT 
Hey how are you? 

On Saturday [email protected] wrote: 
> something 
> On Friday [email protected] wrote: 
>> previous thing 
EOT 

puts text.gsub(/(?:^>|On \w+ [email protected] wrote:).+\n/m, '') 

# => "Hey how are you?\n\n" 
+0

[email protected] должно быть простым электронным регулярным выражением. –

+0

Вы можете понять, что часть. Я просто показываю, что 'gsub' прекрасно справится с этим. –

+0

cheers, я пытался создать регулярное выражение из regular-expressions.info, но он прекратил регистрироваться как регулярное выражение после стольких символов. но на самом деле мне нужно только проверить '* @ * wrote:' –

Смежные вопросы