자바로 대괄호, 중괄호와 같은 괄호 사이에 있는 내용을 추출하거나 제거하는 방법입니다.
괄호 제거 정규식
단순하게 괄호만 제거하는 방식으로 괄호 속에 있는 내용을 추출하는 방법입니다.
// 괄호 제거
String s1 = "(123234324345)";
String replace1 = s1.replaceAll("[()]", "");
System.out.println("replace1 = " + replace1);
// 중괄호 제거
String s2 = "{123234324345}";
String replace2 = s2.replaceAll("[{}]", "");
System.out.println("replace2 = " + replace2);
// 대괄호 제거
String s3 = "[123234324345]";
String replace3 = s3.replaceAll("[\\[\\]]", "");
System.out.println("replace3 = " + replace3);
일반 괄호()랑 중괄호{}는 그대로 사용하면 되는데, 대괄호는 정규식에서 사용하는 문자라서 이스케이프 처리(\\)를 해야 합니다.
특정 문자 사이 추출 정규식
문자열에서 특정 문자 사이에 있는 내용을 추출하는 방법입니다.
String s = "131a4234534a5467";
String extractBetweenA = s.replaceAll(".*?a(.*?)a.*", "$1");
System.out.println("extractBetweenA = " + extractBetweenA);
예제는 소문자 A 사이에 있는 문자열을 추출하는 정규식입니다.
replaceAll 메소드 두번째 매개변수로 사용된 $1는 첫 번째 캡처 그룹을 의미하며, "a" 사이에 있는 문자열만을 남기고 나머지 부분을 제거하게됩니다.
괄호 안 문자 제거 정규식
정규식을 사용하여 괄호 안에 있는 문자열을 제거하는 방법입니다.
String s = "1231(23423)4324";
String removeBetweenBrace = s.replaceAll("\\(.*?\\)", "");
System.out.println("removeBetweenBrace = " + removeBetweenBrace);
String removeStringInBrace = s.replaceAll("\\((.*?)\\)", "()");
System.out.println("removeStringInBrace = " + removeStringInBrace);
괄호도 같이 제거하는 정규식은 단순하지만, 괄호를 제거하지 않는 방식은 조금 다릅니다.
- \\(와 \\)는 여는 괄호와 닫는 괄호를 의미합니다.
- (.*?)는 괄호 안의 내용입니다.
- "()"는 괄호 안의 내용을 빈 문자열로 대체합니다.
읽으면 좋은 글
[Java] String - replace, replaceAll : 다른 문자열로 대체