Убрать дублирование знаков пунктуации Swift

Требуется написать программу в Swift, которая будет принимать текст с лишними знаками препинания, с заглавными буквами не там, где нужно, с нескольким пробелами подряд и т.д.

Как сделать, чтобы вместо нескольких знаков препинания, которые дублируются, остались только те, которые нужны?


Ответы (1 шт):

Автор решения: schmidt9

Вот базовый пример, показывающий удаление повторяющихся символов с помощью регулярного выражения

import UIKit

func sanitizeString(_ string: String) -> String {
    /*
     используем регулярное выражение, состоящее из двух групп:
     в первой символ, для которого нужно удалить повторения,
     во второй его повторы, здесь ищем точки, запятые и пробелы
     */
    let pattern = "([\\.,\\s])(\\1{1,})"
    // используем NSString, чтобы избежать преобразований NSRange > Range
    var buffer = string as NSString

    guard let regex = try? NSRegularExpression(pattern: pattern, options: []) else {
        return string
    }

    while let match = regex.firstMatch(in: buffer as String, options: [], range: NSRange(location: 0, length: buffer.length)) {
        // диапазон с повторами
        let range = match.range(at: 2)
        buffer = buffer.replacingCharacters(in: range, with: "") as NSString
    }

    return buffer as String
}

let testStr = "..... Тест,,, Тест2   ,,,,,"
let r = sanitizeString(testStr)
print(r) // вывод ". Тест, Тест2 ,"
→ Ссылка