2016-03-31 10 views
1

Ich muss alle determiners aus dem Satz ersetzen. Mein Problem, dass, wenn ich "a" ersetze, es diesen Buchstaben in Wort ersetzt.Suchen und ersetzen durch "nur passende Wörter" Option

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

Zum Beispiel: a match a

Das Ergebnis wird sein: mtch

Aber ich will: match

+0

Was ist Ihr erwartetes Ergebnis? –

+0

Ergebnis sollte sein: '' 'match'''' – Arti

+0

Wenn ihre Engine _assertions_ unterstützt, verwenden Sie eine Regex wie diese' (? sln

Antwort

1

können Sie ganze Wörter mit \b Wortgrenze erkennen und optional Leerzeichen nach diesen Worten mit \s* (1+ Leerzeichen), können Sie auch greifen. Dann können wir sicherstellen, dass keine führenden Leerzeichen mit .stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) übrig sind.

Beachten Sie auch, dass Strings in Swift ist C-Strings (Unterstützung Escape-Sequenzen) und da die regex speziellen Meta-Zeichen müssen mit einem Backslash maskiert werden, Sie müssen, um tatsächlich die Schrägstriche im Muster verdoppeln (dh \s ->"\\s") .

Hier Swift 2.1 Beispielcode:

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() 
    )+"\"") 
} 

Er druckt "match".

Beachten Sie auch, dass options: .CaseInsensitive eine Übereinstimmung zwischen Groß- und Kleinschreibung durchführt. Verwenden Sie options: [], um die Suche nach Groß- und Kleinschreibung zu machen.

Nun, wenn Sie eine Liste der Determinativen haben, verwenden Wechsel:

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

Dieser Ausdruck passt auf a, an oder the mit 0+ Leerzeichen folgt.

1

Sie mit Wortgrenzen wie diese /\ba\b/ versuchen sollten. Sollte g globale Suche und case insensitive i Flags verwenden.

Wortgrenze \b stellt sicher, dass kein Zeichen a folgt oder vorangestellt ist.

Regex101 Demo

+0

können Sie Beispiel auf swift liefern? – Arti

+0

@Arti: Tut mir leid, bin kein schneller Programmierer. –

Verwandte Themen