2015-10-02 3 views
0

у меня есть некоторые строки в следующем формате:Найти диапазон строк

Существует ______ Appels

Существует ______ коров и ______ овец

Существует ______ красные цветы, ______ зеленые цветы и ______ желтые цветы

Где ______ представляет редактируемую часть строки.

Эти строки содержатся в UITextView, но я хочу, чтобы поля ______ были доступны для редактирования, а остальные строки - только для чтения.

Я попытался реализовать метод "textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String)", чтобы ограничить редактирование в диапазоне, в котором присутствует ______. Но у меня возникают проблемы с вычислением диапазона строк ______.

Я подклассы UITextView, добавил переменную:

var characterWhereEditIsAllowed: Character = "_" 

и попытался вычислить диапазон от первого вхождения в «characterWhereEditIsAllowed» до последнего, как так:

guard let editableChracter = editableCharacter else { 
    return 
} 

guard let idx = text.characters.indexOf(editableChracter) else { 
    return 
} 

editableCharacterStartIndex = text.startIndex.distanceTo(idx) 

Я застрял, обнаружив индекс последнего вхождения «_» в тексте textview. Помощь приветствуется.

P.S: Я пробовал использовать метод rangeOfString, но поскольку поля «______» различаются по размеру, я не могу проверить эту «строку» определенной длины.

+1

Как об использовании регулярных выражений, чтобы найти все экземпляры «_» с различными длинами? 'NSRegularExpression' вернет массив диапазонов. – Koen

ответ

0

Использование Regex:

let text = "There is ______ red flowers, ______ green flowers and ______ yellow flowers" 
let regex = try! NSRegularExpression(pattern: "_+", options: []) 
let matchRanges = regex.matchesInString(text, options: [], range: NSMakeRange(0, text.characters.count)).map { $0.range } 

print(matchRanges) // matchRanges is an Array<NSRange> 
Смежные вопросы