Удаление строк в текстовом файле на основе начальных символов - PullRequest
4 голосов
/ 17 февраля 2012

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

Hey how are you?

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

Как бы удалить строки, начинающиеся с >, а также строки, которые включают email@example.com wrote

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

Ответы [ 4 ]

4 голосов
/ 17 февраля 2012

Попробуйте

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
2 голосов
/ 17 февраля 2012

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

message_filtered = '';
message_txt.to_s.lines {|line| message_filtered << line unless line[0] == '>' }
1 голос
/ 17 февраля 2012

Как насчет этого,

> 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?"
0 голосов
/ 17 февраля 2012

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...