помощь с регулярным выражением для записи всего в строке

#ruby #regex

#ruby #регулярное выражение

Вопрос:

Мне интересно, существует ли конкретное регулярное выражение, которое я могу написать для извлечения любой информации, которая следует за ‘Log1:’ в начале строки. Это то, что я пробовал до сих пор:

 ^Log1: ([w|s]*)$
  

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

Log1: здесь важный материал
Log1: он может содержать (), [ ].

Любая помощь приветствуется.

Комментарии:

1. Обратите внимание, что «обычные» мета-символы теряют свои особые полномочия внутри классов символов. Таким образом, [w|s] соответствует одному символу, одному из: [a-zA-Z0-9_] , '|' или s (символ пробела)

Ответ №1:

 ^Log1: (.*)$
  

. Соответствует любому символу.

Комментарии:

1. любой символ … кроме r и n .

2. @Барт Кирс: Не обязательно… только в режиме многострочного сопоставления. Я не знаю, доступно ли это в Ruby, но даже в этом случае вопрос заключается в сопоставлении одной строки.

3. AFAIK, большинство реализаций регулярных выражений не допускают . совпадения r , n если вы специально не укажете ему сопоставлять их с помощью определенных параметров / флагов ( (?m) для Ruby и (?s) для большинства других языков). Включен ли Ruby (?m) по умолчанию?

4. @Bart Нет, Ruby по умолчанию не включает многострочный режим. Ваш уточняющий комментарий был правильным; ответ @minitech неточен.

Ответ №2:

Вы могли бы попробовать что-то вроде этого:

 s.split(/^Log1: */)[1]
  

Это вернет, nil если нет начала Log1 и остальной части строки, в противном случае. Если строка содержит завершающие символы, которые вам не нужны:

 s.split(/^Log1: */)[1].chomp
  

Ответ №3:

Вы хотите прочитать все строки в вашем файле журнала, или есть некоторые, которые не начинаются с Log1: ? Если бы первое, я бы просто сделал line[7..-1] .