2016-03-31 2 views
1

Мне нужно заменить все предложение determiners. Моя проблема в том, что когда я заменяю «а», он заменяет эту букву словом.Искать и заменять только опцией «match words only»

str.stringByReplacingOccurrencesOfString("a", withString: "")

Например: a match a

Результат будет: mtch

Но я хочу: match

+0

Каков ваш ожидаемый результат? –

+0

результат должен быть: '' 'match''' – Arti

+0

Если их движок поддерживает _assertions_, используйте регулярное выражение, подобное этому (? sln

ответ

1

Вы можете обнаружить целые слова с \b границей слова, а также, вы можете получить дополнительный пробел после этих слов с \s* (1+ пробелами). Затем мы можем удостовериться, что никаких ведущих пробелов не осталось с .stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).

Также обратите внимание, что строки в Swift являются C строке (поддержка управляющих последовательностями) и так как регулярные выражения специальных метасимволы должны быть экранированы с буквальными обратным косыми чертами, вы должны фактически удвоить слеш шаблона (т.е. \s ->"\\s") ,

Вот Swift код 2.1 Образец:

var s = "a match a" 
var out_s = "" 
if let regex = try? NSRegularExpression(pattern: "\\ba\\b\\s*", options: .CaseInsensitive) { 
    out_s = regex.stringByReplacingMatchesInString(s, options: .WithTransparentBounds, range: NSMakeRange(0, s.characters.count), withTemplate: "") 
    print("\""+out_s.stringByTrimmingCharactersInSet(
     NSCharacterSet.whitespaceAndNewlineCharacterSet() 
    )+"\"") 
} 

Он печатает "match".

Обратите внимание, что options: .CaseInsensitive будет выполнять нечувствительность к регистру, используйте options: [], чтобы сделать регистр поиска чувствительным.

Теперь, если у вас есть список детерминативов, используйте чередование:

"\\b(?:an?|the)\\b\\s*" 

Это выражение будет соответствовать a, an или the следует с 0+ пробелов.

1

Вы должны попробовать с границами слова, как этот /\ba\b/. Следует использовать g глобальный поиск и регистр нечувствительный к регистру i flags.

Граница в Word \b гарантирует, что персонажа не следует или предшествует a.

Regex101 Demo

+0

Можете ли вы привести пример по быстрому? – Arti

+0

@Arti: Извините, не быстрый программист. –

Смежные вопросы