반응형
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
반응형
'Apple > Swift' 카테고리의 다른 글
[Swift] 공식 문서에서 상속 관계, 프로토콜 채택 여부 확인하기 (0) | 2022.02.05 |
---|---|
[Swift] 배열에서 중복 제거하기 (0) | 2022.02.05 |
[Swift] 비트 연산과 비트마스킹 (NOT, AND, OR, XOR, 시프트 등) (0) | 2022.01.17 |
[Swift] 진수 변환하기 (2진수, 8진수, 10진수, 16진수 등) (0) | 2022.01.17 |
[Swift] 거듭제곱하기 (0) | 2022.01.15 |
댓글