본문 바로가기
일하딩/Web

[JAVA] 정규표현식으로 특정 패턴의 문자열 찾기

by 별난형 2020. 12. 21.

 

CSV 파일에서 데이터를 긁어올때 콤마(,) 단위로 split 을 한다.

 

주의해야할 점이 숫자 컬럼은 천단위에 콤마(,) 표시가 있어서 자칫 천단위마다 잘려버리는 경우가 있다.

 

그래서인지 숫자 컬럼은 "100,000" 이런식으로 따옴표("") 를 사용하여 하나의 컬럼인것을 표시를 해두는 것 같다.

 

그래서 따옴표("") 안에 있는 데이터들만 찾아서 그 안에 콤마(,) 를 제거하고 동시에 따옴표("") 도 제거하는 방법을

 

정리해보았다.

 

 

1. 따옴표("") 안에 데이터 찾기

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
	public static void main(String[] args) {
		String tText = "가,abc,100,\"1,000\",\"400,000,000\",RXT100";
		Pattern ptrn = Pattern.compile("\"(.*?)\"");	// 따옴표 안에 있는 패턴 추출.
		Matcher matcher = ptrn.matcher(tText);
		while(matcher.find()) {
			System.out.println(matcher.group());
		}
	}
}

위와 같이 Pattern 과 정규표현식을 사용하여 따옴표("") 를 가지고 있는 패턴을 찾은 다음 출력해보았다.

 

결과는 아래와 같다.

 

 

2. 콤마(,) 와 따옴표("") 제거

 

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
	public static void main(String[] args) {
		String realData = "가,abc,100,\"1,000\",\"400,000,000\",RXT100";		
		String tempData = realData;
		Pattern ptrn = Pattern.compile("\"(.*?)\"");	// 따옴표 안에 있는 패턴 추출.
		Matcher matcher = ptrn.matcher(tempData);
		System.out.println("수정전 : " + tempData);
		while(matcher.find()) {
			System.out.println(matcher.group());
			tempData = matcher.replaceFirst(matcher.group().replace(",", "").replace("\"", ""));
			matcher = ptrn.matcher(tempData);
		}
		System.out.println("수정후 : " + tempData);
		System.out.println("원본 : " + realData);
	}
}

 

 

Matcher 에서 제공하는 replaceFirst 를 사용하여 변경을 해주고 

matcher 를 다시 엎어씌우는 형태로 진행하였다.

 

 

 

결과값은 위와 같이 확인할 수 있다.

 

Pattern 을 찾을 때마다 while 문을 수행할 것이고 이때 처음으로 찾은 부분을 수정된 데이터로 변경하는 방법이다.

 

괄호, 대괄호 등의 데이터일때도 정규표현식을 적절히 잘 조합하면 사용가능하다.

 

 

 

 

댓글