2010-07-23 2 views
7

내가 좋아하는, 작은 따옴표로 묶여있는 CSV 파일의 데이터가 있습니다자바 정규식이 시작/끝 따옴표를 제거하지만, 내부에서 탈퇴 인용

'Company name' 
'Price: $43.50' 
'New York, New York' 

내가에 작은 따옴표를 대체 할 수 있도록하려면 내가

updateString = theString.replace("^'", "").replace("'$", ""); 

을 할 수

'Joe's Diner' should become Joe's Diner 

그러나 나는 싶었 : 값의 시작/끝하지만 같은 데이터에 따옴표를 남겨 만약 내가 그것을 하나의 교체를하기 위해 결합 할 수 있는지 아십시오.

+0

당신은 불균형 따옴표를 허용 할 * 셀 내에서 쉼표를 이스케이프하려면 따옴표를 사용 하시겠습니까? 한 번에 둘 다 할 수는 없습니다. – finnw

+0

예, 아주 쉽게 결합 할 수 있습니다. @ Josiah의 답을 다시 한번 살펴보고 올바른 방법을 사용하고 있습니다. –

답변

16

또는 연산자를 사용할 수 있습니다. 그런 당신을 위해 작동하는 경우 :

+0

replaceAll로 변경해야했지만 작동했습니다. 대답을 업데이트하면 받아 들일 것입니다 – George

+0

도와 줘서 기쁩니다 :) – Josiah

+0

나는 이것과 반대가 필요합니다. 이걸 변환하고 싶습니다. // * [@ text = 'some'Text'] // // [@ text = 'some \'Text '] – vaibhavcool20

1
updateString = theString.replaceFirst("^'(.*)'$", "$1"); 

참고

updateString = theString.replaceAll("(^')|('$)",""); 

는 참조 그 형태는 replace 리터럴 문자열이 아니라 정규 표현식에를 사용하기 때문에 더는 작동하지 않습니다 없습니다.

캡쳐 그룹 (.*)을 사용하면이 방법을 사용할 수 있습니다. 대체 텍스트는 $1입니다. 당신은 시작과 끝에서 작은 따옴표 거기에 특정 있다면, 가장 간단한 솔루션은 물론

Pattern patt = Pattern.compile("^'(.*)'$"); // could be stored in a static final field. 
Matcher matcher = patt.matcher(theString); 
boolean matches = matcher.matches(); 
updateString = matcher.group(1); 

: 당신은 또한 같은 뭔가를 할 수

updateString = theString.substring(1, theString.length() - 1); 
관련 문제