문자열 주변의 작은따옴표를 바꾸려면 regexp_replace를 사용하세요. 단, 단어 내에서는 바꿀 수 없습니다.

문자열 주변의 작은따옴표를 바꾸려면 regexp_replace를 사용하세요. 단, 단어 내에서는 바꿀 수 없습니다.

Postgres 데이터베이스의 헤더 열에 있는 작은따옴표를 공백으로 바꾸기 위해 bash 스크립트에서 다음 코드를 사용하고 있습니다.

psql -U postgres -d my_database -c "UPDATE my_table SET title = regexp_replace(title, '''', ' ', 'g')"

내 문제는 다음과 같이 문자열 주위의 작은따옴표를 제거하려고 한다는 것입니다.

this is example 'number one' ok

~이 되다

this is example  number one  ok 

이것이 바로 제가 바랐던 것입니다. 그러나 단어에서 작은따옴표도 제거하므로 다음과 같습니다.

can't

~이 되다

can t

문자열 주위의 작은따옴표만 바꾸도록 지정하려면 어떻게 해야 합니까?

답변1

단 한 번의 대체만으로 이를 수행할 수 있는 좋은 방법은 없다고 생각합니다. 하지만 4번의 교체로 충분하다면 다음 단계를 따르세요.

  1. \A'다음으로  바꾸십시오 (즉, '문자열의 시작 부분을 바꾸십시오).

  2. '\Z다음으로  대체 (즉, '문자열 끝에서 대체).

  3. 전역적 으로 다음 ([^[:alnum:]])'으로  대체합니다 \1(즉, 영숫자가 아닌 문자 sum 의 모든 시퀀스를 '영숫자가 아닌 문자 sum 으로 대체 ).

  4. '([^[:alnum:]])전역적으로 다음 으로  대체 \1(즉, '영숫자가 아닌 문자의 모든 시퀀스를  영숫자가 아닌 문자로 대체)

순 효과는 '이전 항목을 제외한 모든 항목을 대체하는 것입니다.그리고그 뒤에는 영숫자가 옵니다.

면책 조항: 저는 PostgreSQL에 대해 아무것도 모릅니다. 이를 PostgreSQL 구문으로 직접 변환해야 합니다.

답변2

'더 똑똑한 정규식 사용: " " 및 " '"( SPACE APOSTROPHE및 ) 를 바꾸면 APOSTROPHE SPACE단어 내의 아포스트로피가 누락됩니다.

답변3

단어에 아포스트로피를 사용하지 않으려면 양쪽에 문자가 없는 아포스트로피를 찾으세요. 그러한 아포스트로피를 찾는 정규 표현식은 다음과 같습니다.

([A-Za-z])\'([^A-Za-z])|([^A-Za-z])\'([A-Za-z])|([^A-Za-z])\'([^A-Za-z])

또는 더 짧음

\'([^A-Za-z])|([^A-Za-z])\'

더 짧다

\'([^\w])|([^\w])\'

나는 regexp_replace가 될 것 같아요

regexp_replace(title, '\'([^\w])|([^\w])\'', '\1', 'g')

나는 psql에 익숙하지 않으므로 올바른 synatx는 다음과 같습니다.

regexp_replace(title, '''([^\w])|([^\w])''', '\1', 'g')

관련 정보