Regex для получения текста между парой квадратных скобок в Swift - PullRequest
0 голосов
/ 31 октября 2019

<strong>Lorem Ipsum.<\/strong> Lorem Ipsum. [link-to:shop-page \"instore-pickup\"]Learn More[\/link-to]

Учитывая приведенную выше примерную строку (она включает HTML), которую я получаю от сторонней службы, и я не могу ее улучшить или нормализовать в соответствии со стандартом HTML.

Мне нужно как-то разобрать эту часть [link-to:shop-page \"instore-pickup\"]Learn More[\/link-to], чтобы получить значение Learn More.

Я пробовал \\[.*?\\](.*?)\\[.*?\\] регулярное выражение, но оно не работает для моих нужд. Получение [link-to:shop-page \"instore-pickup\"]Learn More[/link-to] в результате.

func matches(for regex: String, in text: String) -> [String] {
    do {
        let regex = try NSRegularExpression(pattern: regex)
        let nsString = text as NSString
        let results = regex.matches(in: text, range: NSRange(location: 0, length: nsString.length))
        return results.map { nsString.substring(with: $0.range)}
    } catch let error {
        print("invalid regex: \(error.localizedDescription)")
        return []
    }
}

1 Ответ

0 голосов
/ 31 октября 2019

Wiktor, спасибо за указание на этот рабочий фрагмент:

func matches(for regex: String, in text: String) -> [String] {
    do {
        let regex = try NSRegularExpression(pattern: regex)
        let nsString = text as NSString
        let results = regex.matches(in: text, range: NSRange(location: 0, length: nsString.length))
        return results.map { nsString.substring(with: $0.range(at: 1))}
    } catch let error {
        print("invalid regex: \(error.localizedDescription)")
        return []
    }
}

$0.range(at: 1) дает Группу 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...