Разделить строку на подстроки по паттерну

string
range
filter
swift

#1

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.


#2

а если делить по первым трем пробелам?
Или текст не однородный?
Или еще лучше, разбивать по :


#3

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.


#4

идея не очень, но вот если в лоб:

 let arr = string.components(separatedBy: " ")

а потом, поскольку эта часть вроде повторяется: 01.01.2017, 01:10:10: User1:, то можно все элементы массива после по индексу от 3 и дальше объединить

Но мне конечно самому это решение не нравиться(


#5

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.


#6

Я бы отлавливал дату, потом имя:

var str = "01.01.2017, 01:10:10: User1: текст сообщения"

let datePattern = "\\d{2}\\.\\d{2}\\.\\d{4},\\s*\\d{2}:\\d{2}:\\d{2}"
let namePattern = ":.+:"

if let range = str.range(of: datePattern, options: .regularExpression) {
    let date = str.substring(with: range)
    print("Date: \(date)")
    str = str.substring(from: range.upperBound)
}

if let range = str.range(of: namePattern, options: .regularExpression) {
    let name = str.substring(with: range).replacingOccurrences(of: ":", with: "").trimmingCharacters(in: .whitespaces)
    print("Name: \(name)")
    str = str.substring(from: range.upperBound).trimmingCharacters(in: .whitespaces)
}

print("Message: \(str)")

#7

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.


#8

А можете рассказать - где посмотреть информацию о такой магии?

let datePattern = "\\d{2}\\.\\d{2}\\.\\d{4},\\s*\\d{2}:\\d{2}:\\d{2}"
let namePattern = ":.+:"

Я понимаю, что два символа, точка, два символа точка и так далее. Но где написано о том как такое создавать? Почему, например, d2, а не “другая_буква2”?
Что такое s* (пробел?)
Почему слэшами это все делится?
Я еще не до конца прочел книгу по swift. Возможно это в каких то финальных главах описывается.


#9