как получить слово перед определенным ключевым словом в предложении в Swift?

#swift

#swift

Вопрос:

Aipda Карел Сасуит Тубун №106B, RT.2 / RW.1, Ps. Baru, Каравачи, Кота Тангеранг, Бантен 15112, Индонезия»

У меня есть такой строковый адрес, и я хочу получить почтовый индекс 15112 , который всегда располагается прямо перед ‘, Индонезия’

Я новичок, прошу прощения, если это тривиально, поскольку я не могу найти его в Stackoverflow

Ответ №1:

 let address = "Aipda Karel Sasuit Tubun No.106B, RT.2/RW.1, Ps. Baru, Karawaci, Kota Tangerang, Banten 15112, Indonesia"

func postcode(from address: String, for area: String) -> String? {
    let array = address.replacingOccurrences(of: ",", with: "").components(separatedBy: " ")
    if let index = array.lastIndex(where: { $0.contains(area) }) {
        return array[index - 1]
    }
    return nil
}

postcode(from: address, for: "Indonesia")
  

Ответ №2:

Извините, я думаю, что это немного затянутый метод, но это должно сработать:

 let address = "Aipda Karel Sasuit Tubun No.106B, RT.2/RW.1, Ps. Baru, Karawaci, Kota Tangerang, Banten 15112, Indonesia"
let keyword = "Indonesia"

let components: [String] = address.split(separator: " ").map({ String($0).replacingOccurrences(of: ",", with: "") })
var postCode = components.first ?? ""

for comp in components {
    if comp == keyword {
        break
    }
    postCode = comp
}

print(postCode)
  

Ответ №3:

Вы могли бы использовать регулярное выражение :

 let str = "Aipda Karel Sasuit Tubun No.106B, RT.2/RW.1, Ps. Baru, Karawaci, Kota Tangerang, Banten 15112, Indonesia"
let range = NSRange(location: 0, length: str.utf16.count)
let regex = try! NSRegularExpression(pattern: "[0-9] (?=, Indonesia)")

if let match = regex.firstMatch(in: str, range: range) {
    let subStr = String(str[Range(match.range, in: str)!])
    print(subStr) //15112
}