#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]
.