Я новичок в регулярных выражениях, и я чувствую это очень трудно решить:рубин на рельсах регулярное выражение
У меня есть следующая строка:
"inforun 7970 12423 99 10:03 ? 00:09:03 abcd -PR -gmh domain.den.abc.com -gmp 6020 -guid 9c06cc02-b1c8-41cf-93e6-1d795e9fff62 -rst 180 -s FOLDER_NAME:wkf_workflow.s_session -something Session task instance [session]"
Я должен извлечь time
который 10:03
и 'domain'
в domain.den.abc.com
и FOLDER_NAME
, то 'workflow'
в 'wkf_worklfow'
и 'session'
в 's_session'
time
, domain
, foldername
, workflow
и session
продолжают меняться для каждой строки, и есть целая цепочка таких строк, каждая из которых прикреплена как одна строка. Вот шаблоны, которые являются общими для каждой строки. 'abcd -PR -gmh'
является общим и может помочь в поиске времени, которое находится непосредственно перед '?'
'-s', ':wkf'
является общим для всей строки, и folder_name
находится прямо между этими двумя. 'workflow'
находится между 'wkf_'
и '.s_'
сеанса между 's_'
и непосредственной следующей '-'
мне нужно время, домен, имя папки, рабочий процесс и сеансом все в отдельно строках. я пытался практиковать регулярное выражение только несколько дней назад она занимает так много времени для меня даже постигать что-то вроде "\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z"
которое дается here Спасибо за вашу помощь
Привет, я не знаю, если я делаю правильную вещь, вот мой код: string2, string1 = string.scan (/ (? <= \ S) (\ d {2}: \ d {2}) (? = \ s) /) «string» имеет строку i, помещенную в вопросе, и iam, используя string.split string3, string4 = string.scan (/ (? <= \ s) ((?: [a-zA-Z \ d] + (?: \ - [a-zA-Z \ d] +) * \.) + [a-zA-Z] {2,4}) (? = \ s) /) string5, string6, string7 = string.scan (/ (? <= \ s) ([a-zA-Z \ d_] +): wkf _ ([a-zA-Z \ d] +) \. s _ ([a-zA-Z \ d] +) (? = \ s) /) Очевидно, что я делаю что-то неправильно здесь, пожалуйста, дайте мне знать. Спасибо – user1455116
@opensourceis - см. Обновленный ответ с кодом ruby –
Спасибо, кажется, что-то работает для меня – user1455116