2017-12-12 5 views
2

저는 Postgres를 사용 중이며 '-'또는 '|'가 마지막에 나오는 모든 것을 제거하려고합니다.'-'또는 '|'가 마지막으로 나오는 문자열을 자릅니다.

'Trump tweets in China - how, and why does it matter? - BBC News' 

너무 일찍 잘립니다 : 같은 문자열이 있다는 것입니다

select regexp_replace(title, E'(- |\\|).+$', '') as title from articles 

문제 :

'Trump tweets in China' 

가 어떻게 그것이 제거 할 수있는이 내가 생각 해낸 쿼리입니다 접미사는 '-'의 마지막 출현 이후에만?

감사합니다.

+1

보십시오 'E'(?:(?! - | \\ |).) + $ '' –

+0

감사합니다. 지금 내가 '-'또는 '|' 그것은 빈 문자열을 반환합니다. 어떻게 수정해야합니까? – kambi

+1

'E'(- | \\ |) (? : (?! - | \\ |).) + $ ''앞에 넣어야합니다. '\ 1'. 또는 'E'(- | \\ |) (? :(?! \\ 1).) + $ '' –

답변

1

당신을 캡처 한 후 바로 촬영 된 텍스트와 동일하지 않은 문자열의 나머지 부분과 일치, 공간 및 하이픈 또는 파이프 symobl 중 하나와 일치 할 수 있습니다

(- |\|)(?:(?!\1).)+$ 

\1으로 바꾸십시오. 필요한 경우 이스케이프합니다 (E'...' 문자열에서 이중 이스케이프 사용해야합니다).

세부

  • (- |\|) - 중 하나 - 또는 | 기호
  • (?:(?!\1).)+ - 어떤 문자 (.)이 1 명 이상 발생 (+), 그건 - 순서를 시작하거나하지 않습니다 |과 동일 - 그룹 1에 포착 된 내용에 따라 다릅니다.
  • $ - 문자열 끝.

regex demo을 참조하십시오.

1

이 작업을 시도 할 수 있습니다 : 그것은 기본적으로 말하는

select regexp_replace ('Trump tweets in China - how, and why does it matter? - BBC News', 
    '[|-][^|-]*$', '') 

:

  • | 또는없는 어느 쪽도 | 나에 - 문자의 번호 뒤에 -
  • 문자열의 끝

결과 :

Trump tweets in China - how, and why does it matter?