#swift #regex #nsregularexpression
#swift #регулярное выражение #nsregularexpression
Вопрос:
Я сохраняю вводимые пользователями данные в БД в виде строки и хотел бы удалить все пробелы в каждой строке.
Ввод от пользователя:
Hi!
My name is:
Bob
I am from the USA.
Я хочу удалить пробелы между «Bob», поэтому результат будет:
Hi!
My name is:
Bob
I am from the USA.
Я пытаюсь сделать это с помощью следующего кода
let regex = try! NSRegularExpression(pattern: "n[\s] ", options: .caseInsensitive)
a = regex.stringByReplacingMatches(in: a, options: [], range: NSRange(0..<a.utf16.count), withTemplate: "n")
но этот код заменяет несколько новых строк » n», я не хочу этого делать.
После того, как я выполню приведенный выше код: "1nnn 2"
-> "1n2"
. Результат, который мне нужен: "1nnn2"
(удаляются только пробелы, а не новые строки).
Ответ №1:
Нет необходимости в регулярных выражениях, разделите строку на символ новой строки в массив, а затем обрежьте все строки и снова соедините их вместе
let trimmed = string.components(separatedBy: .newlines)
.map { $0.trimmingCharacters(in: .whitespaces) }
.joined(separator: "n")
или вы можете использовать reduce
let trimmed = string.components(separatedBy: .newlines)
.reduce(into: "") { $0 = "($1.trimmingCharacters(in: .whitespaces))n"}
Ответ №2:
Вы можете использовать
let regex = try! NSRegularExpression(pattern: "(?m)^\h ", options: .caseInsensitive)
На самом деле, поскольку в шаблоне нет символов регистра, вы можете удалить .caseInsensitive
и использовать:
let regex = try! NSRegularExpression(pattern: "(?m)^\h ", options: [])
Смотрите демонстрацию регулярных выражений. Шаблон означает:
(?m)
— включить многострочный режим^
— из-за того(?m)
, что оно соответствует любой начальной позиции строкиh
— один или несколько горизонтальных пробелов.
Пример кода Swift:
let txt = "Hi!nnMy name is:n BobnnI am from the USA."
let regex = "(?m)^\h "
print( txt.replacingOccurrences(of: regex, with: "", options: [.regularExpression]) )
Вывод:
Hi!
My name is:
Bob
I am from the USA.