본문 바로가기
Apple/Swift

[Swift] 문자열에서 특정 문자 한 개 또는 여러 개 제거하기

by 어멘드 2022. 1. 18.
반응형

 PS에서 입력을 파싱해서 사용해야 할 때가 있다.
 얼마전 숫자 N개를 공백으로 구분해서 주지 않고 콤마로 구분한 뒤, 심지어 괄호 안에 담아서 [1,2,3,4,5] 이렇게 주는 문제를 만났다ㅠㅠ
 공백 대신 콤마로 주는 건 split의 separator를 ", "로 바꿔주기만 하면 되는데, 앞 뒤에 대괄호를 떼어내는 게 문제..
 인덱스로 앞 뒤 잘라내는 방법도 있겠지만 스위프트에서 문자열 인덱스 다루는 게 제일 귀찮은 일이어서ㅎㅎ 그냥 괄호를 없애버리는 방법을 찾았다.


 문자열 내에서 Target Substring을 모두 찾아 원하는 Replacement 문자열로 바꿔주는 replacingOccurrences라는 메소드가 있다.

func replacingOccurrences<Target, Replacement>(of target: Target,
                                               with replacement: Replacement,
                                               options: CompareOptions = [],
                                               range searchRange: Range<Index>? = nil) -> String where Target : StringProtocol, Replacement : StringProtocol

 


 단순하게 이 메소드를 2번 써서 "["와 "]"를 각각 제거해줄 수 있다.

var myString = "[1,2,3,4,5]"

myString = myString.replacingOccurrences(of: "[", with: "") // 여는 괄호 제거
myString = myString.replacingOccurrences(of: "]", with: "") // 닫는 괄호 제거

print(myString)     // 1,2,3,4,5

 


 하지만 옵션을 주면 한번 호출로 두 괄호 모두 제거가 가능하다. 옵션을 .regularExpression으로 주면 regex를 사용해서 Target String을 표현할 수가 있다!!

var myString = "[1,2,3,4,5]"

myString = myString.replacingOccurrences(of: "[\\[\\]]", with: "", options: .regularExpression)

print(myString)     // 1,2,3,4,5

 


  정규표현식 문법을 자세히 설명하진 않겠지만 문자 여러 개를 표현하는 정규표현식은 대괄호 [ ] 안에 문자들을 다 넣어주면 된다. 
 이때 패턴 표현에 쓰이는 문자들도 있기 때문에 그런 문자들은 escaping의 의미인 \\를 넣어줘야 한다.
 "["와 "]"도 패턴 표현에 쓰이는 문자이기 때문에 [ \\[ \\] ] 이렇게 써준 것이다.

 


 아래는 문자 3개 "A", "B", "C"를 한 번에 제거하는 예시 코드이다.

var myString = "ABCDBACDBCADBBDDCAA"

myString = myString.replacingOccurrences(of: "[ABC]", with: "", options: .regularExpression)

print(myString)     // DDDDD

 

반응형

댓글