정규식 관련 질문입니다. 0 6 4,704

by 지에나르 regexp_replace 정규식 공백 [2012.07.04 14:12:44]


안녕하세요.
정규식관련 질문입니다.

LINESTRING  (1012417.78500000 2004330.15050000, 1012421.61640000 2004325.13210000, 1012434.21990000 2004334.25960000, 1012429.86110000 2004339.73160000, 1012417.78500000 2004330.15050000)

요 문장에서 앞에 LINGSTRING 단어와 ( ) 양쪽 괄호를 제거하려고합니다.
REGEXP_REPLACE를 사용해서요.
[LINESTRING()] 이런식으로 하면 LINESTRING와 첫괄호 사이의 공백이 제거가 안됩니다.
그리고 [LINESTRING  ()] 공백을 넣고 이렇게 사용하면
저 숫자들 사이에 공백까지 제거가 되어버리더라구요..
숫자사이의 공백은 제거하지않고 앞에 LINGSTRING과 괄호사이의 공백과 괄호를 제거하려면 어떻게 작성해야할까요?
답변기다리겠습니다.

by 제로 [2012.07.04 15:04:25]
regexp_replace(문자열, 'LINESTRING( )*|\(|\)')

by 지에나르 [2012.07.05 14:20:16]

제로님 답변감사드립니다.
한가지 더 질문이 있는데
LINESTRING과 첫번째 괄호 사이에 공백이 두칸입니다.
위의 코드대로 실행하면 공백이 한칸만 지워지더라구요.
위의 질문대로 실행이 되고 LINESTRING과 첫번째 괄호 사이 공백 두개를 모두 제거하려면 어찌해야될까요?
정규식 처음 접해봐서 좀 어렵네요..


by 제로 [2012.07.05 14:36:39]
공백이 몇개이던 모두 제거 될테데요? 
아래 테스트 구문 돌려시고 확인 한번 해보세요

select regexp_replace(v, 'LINESTRING( )*|\(|\)') result
   , length(regexp_replace(v, 'LINESTRING( )*|\(|\)')) len
from (
   select 'LINESTRING (1012417)'  v from dual union all
   select 'LINESTRING (1012417)'  v from dual union all
   select 'LINESTRING  (1012417)' v from dual union all
   select 'LINESTRING  (1012417)' v from dual 
   );

by 손님 [2012.07.05 15:33:36]

올려주신 코드로 하니까 문제 없네요..
일반텍스트에선 공백 모두 제거되는듯 한데..
제가 공간데이터로 하고있는데 공백 하나 제거가 안되네요..ㅠ
우선 다른방법을 찾긴 했는데
위의 방법에서 추가로 MULTILINESTRING 까지 없앨려면 어찌해야할가요..
정규식 너무 복잡하네요 ㅠㅠ


by 제로 [2012.07.05 16:07:20]
regexp_replace(v, '[a-z|A-Z]( )*|\(|\)')

by 손님 [2012.07.05 17:23:47]

아 이런방법이 있었군요
감사합니다 제로님^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입