2014-01-15 2 views
2

"% in %"및 "@"그룹으로 문자열을 분할하려고합니다. 모든 설명서와 내가 찾을 수있는 모든 것은 괄호가 R 정규식에서 그룹화에 사용되는 메타 문자라고 말합니다. 그래서 코드R 정규식 : 메타 문자로 작동하지 않는 괄호

> strsplit('example%in%aa(bbb)[email protected]', '[(%in%)@]', perl=TRUE) 

날입니다

[[1]] 
    [1] "example" "aa(bbb)aa"  "cdef" 

을 주어야한다, 그것은 "AA (BBB) ​​AA"혼자, 일치하는 표현 괄호 이스케이프되지 않기 때문에이 괄호를 떠나야한다. 하지만 대신 사실은 나를 줬습니다

[[1]] 
    [1] "example" "" "" "" "aa" "bbb" "aa" "cdef" 

괄호가 메타 문자가 아닌 것처럼! 이 문제는 무엇이며 어떻게 해결할 수 있습니까? 감사!

이것은 strsplit에서 인수 perl = TRUE가있는 경우와없는 경우에 해당됩니다.

+0

문자 클래스 변환은 '각 문자가 혼자 있습니다.'입니다. 가지고있는 것은'(? : \ (| % | i | n | @ | \))와 동일합니다.' – sln

답변

6

읽고있는 어떤 문서를 확인하지만, ?regex에서 확장 정규 표현식 섹션되지는 말한다 :

대부분의 메타 문자는 그들의 특별한을 잃게 문자 클래스 안에서 의미. ... ('^ - \'만 특수 문자 클래스입니다.)

문자 클래스를 만들 필요가 없습니다. 그냥 사용 "또는"|이 (당신은 가능성이 두 그룹 "%in%"에 필요하지 않습니다, 그러나 그것은 아무것도 상처를 안) :

> strsplit('example%in%aa(bbb)[email protected]', '(%in%)|@', perl=TRUE) 
[[1]] 
[1] "example" "aa(bbb)aa" "cdef" 
2

문자 클래스 [] 내부에서 대부분의 문자는 ()을 포함하여 특별한 의미를 잃습니다.

당신은 대신 정규식 할 수 있습니다

:

'%in%|@' 
3

필요가 없습니다 여기 [ 또는 (을 사용하려면이 :

strsplit('example%in%aa(bbb)[email protected]', '%in%|@') 
[[1]] 
[1] "example" "aa(bbb)aa" "cdef"  
+0

'['와'|'의 차이점은 무엇입니까? – esa606

+0

이것이 도움이 될지 모르지만'[''는 문자 클래스이고'|'는 or 연산자입니다 ... – agstudy

관련 문제