Я столкнулся с проблемой использования регулярных выражений, необходимо решить два вопроса: от простого к сложному.Во-первых, это использование регулярного выражения для сопоставления строки, после чего оно должно извлечь некоторые подстроки из сообщения.
, как у меня есть строка, которая
"В текущей комнате чата: что делатьВы едите на сегодня? (Это сообщение отредактировал Шарон, сообщение отправлено Леоном в 2018-11-10 21:00:00) "
" В текущем чате: Эй, приятель, тебе нравится?golang? (Это сообщение отредактировал Leon, сообщение отправлено в 2018-01-10 10:00:59 от Mike) "
В приведенном выше сообщении некоторая часть не изменится как" В текущем чатеroom: "and" Это сообщение отредактировано ..., сообщение отправлено ... из ... "
Когда я встречал такого рода сообщения, это считается" Уведомлением об изменении ". Iнужно отфильтровать все сообщения, которые компилируются со структурой.
То, что я пишу, это
var testRgx = regexp.MustCompile(`^In current chatting room: .* \(This message is edited by .*, the message is sent on .* from .*\)$`)
Я знаю, что это немного глупо, но по крайней мере может работать
и когда я запускаю его, результат показывает, что это правда.
sample := "In current chatting room: what do you eat for today? I input some shit (sdfhjskdfjksljhfdsjkdf) can you detect this? (This message is edited by Sharon, the message is sent on 2018-11-10 21:00:00 from Leon)"
fmt.Println(testRgx.MatchString(sample ))
До сих пор я думаю, что это fine
Второй шаг - получение содержимого, редактора, времени и оригинального отправителя.
Что я сделал, я заменил первую часть, которая называется «В текущей комнате чата», а затем строка изменилась на
changedString := "what do you eat for today? I input some shit (sdfhjskdfjksljhfdsjkdf) can you detect this? (This message is edited by Sharon, the message is sent on 2018-11-10 21:00:00 from Leon)"
И с конца строки я вырезалСтрока после последнего из, так что я могу получить "Леон".
//after cut after from
cutString := "what do you eat for today? I input some shit (sdfhjskdfjksljhfdsjkdf) can you detect this? (This message is edited by Sharon, the message is sent on 2018-11-10 21:00:00 "
Затем обрезать строку после последнего, чтобы получить время.
//after cut after on
cutString := "what do you eat for today? I input some shit (sdfhjskdfjksljhfdsjkdf) can you detect this? (This message is edited by Sharon, the message is sent "
Затем последнийшаг состоит в том, чтобы извлечь редактор.
Я думаю, что этот метод довольно глуп, я искал какой-то пример, как извлечение компонента, используя regexp Golang: извлечение данных с помощью Regex
но это немного сложный случай, я думаю, что метод для извлечения написанного мной компонента довольно уродлив.
Могу ли я спросить, есть ли способ напрямую использовать регулярное выражение для извлечения компонентов?
Для уведомительного сообщения
«В текущей комнате чата:» не изменится, изменится компонент отредактированного сообщения, а содержимое в скобках изменит только редактор (Шарон), время (2018-11-10 21:00:00)и отправитель (Леон), другая часть в скобках не изменится, как
(Это сообщение отредактировано ххххх, сообщение отправлено в хххх от хххх)