Swift를 사용하면 보통 아래와 같이 replacingOccurrences(of:with:)
를 사용하여 문자열을 대치합니다.
of
: 바꿀 문자열입니다.
with
: 대상을 대체할 문자열입니다.
import Foundation
var s = "abcd..ef."
print(s.replacingOccurrences(of: ".", with: ""))
// 출력 : abcdef
하지만 문자열 대치가 조금 복잡한 경우도 있습니다. 예를들면 다음과 같습니다.
var s = ".!@BaT#*..y.abcdefghijklm."
조건1 : 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
hasPrefix
: String(문자열)이 지정된 접두사로 시작하는지 여부를 Boolean 값으로 반환합니다.
hasSuffix
: String(문자열)이 지정된 접미사로 끝나는지 여부를 Boolean 값으로 반환합니다.
var s = ".!@BaT#*..y.abcdefghijklm."
if s.hasPrefix(".") { s.removeFirst() }
if s.hasSuffix(".") { s.removeLast() }
print(s)
// 출력 : !@BaT#*..y.abcdefghijklm
정규표현식과 관련 없지만 간단하게 문제를 해결할 수 있습니다.
import Foundation
var s = ".!@BaT#*..y.abcdefghijklm."
do {
let patter = "^\\.|\\.$"
let regex = try NSRegularExpression(pattern: patter)
let range = NSRange(s.startIndex..<s.endIndex, in: s)
s = regex.stringByReplacingMatches(in: s, range: range, withTemplate: "")
} catch {
print("정규표현식 오류 : \(error)")
}
print(s)
// 출력 : !@BaT#*..y.abcdefghijklm
NSRegularExpression
를 사용하면 원하는 패턴의 정규표현식을 적용할 수 있지만 코드가 조금 길어집니다.
import Foundation
var s = ".!@BaT#*..y.abcdefghijklm."
print(s.replacingOccurrences(of: "^\\.|\\.$", with: "", options: .regularExpression))
// 출력 : !@BaT#*..y.abcdefghijklm
replacingOccurrences
의 options
파라미터에 regularExpression
를 지정하면 of
파라미터에 정규표현식을 적용할 수 있습니다. 방법 2에 비해 훨씬 간결해 졌습니다.
조건2 : 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다.
import Foundation
var s = ".!@BaT#*..y.abcdefghijklm."
do {
let patter = "[^a-z0-9\\-\\_\\.]"
let regex = try NSRegularExpression(pattern: patter)
let range = NSRange(s.startIndex..<s.endIndex, in: s)
s = regex.stringByReplacingMatches(in: s, range: range, withTemplate: "")
} catch {
print("정규표현식 오류 : \(error)")
}
print(s)
// 출력 : .a..y.abcdefghijklm.
import Foundation
var s = ".!@BaT#*..y.abcdefghijklm."
print(s.replacingOccurrences(of: "[^a-z0-9\\-\\_\\.]", with: "", options: .regularExpression))
// 출력 : .a..y.abcdefghijklm.
조건 1과 마찬가지로 replacingOccurrences
와 정규표현식을 함께 사용하면 간결합니다.