2014-03-06 2 views
5

관련 질문 HEREHERE. 나는이 답을 일반화하려고 시도했지만 실패했다.아포스트로피를 제외한 모든 공백과 구두점에 대한 strsplit

기본적으로 단어, 숫자 및 구두점으로 구분하려는 문자열이 있지만 아직 아포스트로피를 유지하려고합니다. 여기에 내가 무엇을 시도했다 내가 (내가 생각하는) 너무 가까이있어 : I는베이스 솔루션을 원하는 반면

## [[1]] 
## [1] "Raptors" "don't"  "like" "robots" "!"  ""  "I'd"  
## [8] "pay"  "$"  "500" "." "00" "to"  "rid"  "them" "." 

내가보고 싶은 :

여기
x <- "Raptors don't like robots! I'd pay $500.00 to rid them." 

strsplit(x, "(\\s+)|(?=[[:punct:]])", perl = TRUE) 

## [[1]] 
## [1] "Raptors" "don"  "'"  "t"  "like" "robots" "!"    
## [8] "" "I" "'" "d" "pay"  "$"  "500"  "."  "00"  "to"   
## [20] "rid" "them" "." 

가 난 후 무엇을 다른 솔루션 (나는 누군가가 stringr 솔루션을 가지고 있다고 확신한다.)은 질문을 다른 사람들에게 더 일반화시킬 수있다.

참고 :R 특정 정규식 시스템을 가지고 있습니다. 이 질문에 답하려면 R에 익숙해야합니다.

+1

(호기심) R의 정규식 맛에 대한 특정 무엇입니까? – usr2564301

+0

첫 번째 질문과 링크가 정확히 일치하지 않습니다. – eddi

+0

@Jongware 예를 들어 특수 문자를 이스케이프 처리하는 데 문제가 있습니다. –

답변

4

당신은 부정적 예측 (?!')을 사용할 수

strsplit(x, "(\\s+)|(?!')(?=[[:punct:]])", perl = TRUE) 
# [1] "Raptors" "don't" "like" "robots" "!"  ""  "I'd"  "pay"  "$"  "500"  "."  "00"  "to"  "rid"  "them" "." 
관련 문제