내 프로젝트 중 하나에서 쉼표로 구분 된 파일 (CSV)을 처리해야했습니다. 다른 스택 오버플로 질문 (Java: splitting a comma-separated string but ignoring commas in quotes)에 언급 된 표현식을 사용하여 따옴표 안에 쉼표를 무시한 쉼표 (예 : ""
)를 무시하고 쉼표 ,
을 기반으로 데이터를 분할해야했습니다. 최근까지는 아래에 언급 된 특정 시나리오에서 작동하지 않는 것으로 나타 났을 때까지 모든 것이 잘 작동했습니다.쉼표로 구분 된 쉼표를 쉼표로 무시하는 정규식
나는대로 쉼표를 분할하는 데 필요한 데이터 문자열이 있습니다 발현에 따라 나의 이해에서
20Y-62-27412,20Y6227412NK,BRACKET,101H,00D505060,H664374,06/25/2013,1,,
을
String[] rowData = str.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
데이터 분할은 지난 저에게 크기 (10)의 배열을 반환해야합니다 후 빈 문자열을 포함하는 배열의 색인 대신, 분할 자로 취급되지 않는 마지막 두 개의 쉼표 인 크기 8의 배열을 얻게됩니다. 나는이 응용 프로그램의 여러 위치에서이 표현을 사용 했으므로이 작업에서 되돌아 가고 싶지 않습니다. 어떤 도움을 주시면 감사하겠습니다. 감사합니다
사용 A [CSV 파서 (http://stackoverflow.com/questions/101100/csv -api-for-java)? – assylias
문제는 대괄호가 포함 된 수학 용어를 파싱하는 것과 유사합니다. 대부분의 사람들은 RegEx가 ** 그것을 할 방법이 아니라고 말합니다. 나는 심지어 CSV가 정규 언어 인지도 모르겠다. (나의 대학 시절은 오래 전에 사라졌다. 그래서 XD에 관해서는 잘 모르겠다.) – AKDADEVIL
필자는 매우 복잡한 문자 스키마를 가진 파일에 일본어 문자를 가지고있다. 어떤 파서라도 쉽게 할 수 있다고 생각하지 않습니다. 또한 RE는 데이터를 분할하여 올바르게 처리하므로 문제가 발생했습니다. 파서 (parser)를 사용하면 약간의 시간 범위를 고려해 볼 때 옵션이 아닌 수십 개의 장소에서 애플리케이션을 변경할 필요가 있습니다. –