2014-03-03 3 views

답변

5

당신은 gsub 사용할 수 있습니다

s <- "(3 [97 98] 100 110 [116 117] 200)" 

gsub("\\[(\\d+).*?\\]|[()]", "\\1", s) 
# [1] "3 97 100 110 116 200" 

를 작동하는 방법?

gsub에 사용 된 정규식 그것은 논리 또는 (|)에 의해 연결된 두 부분으로 구성

\\[(\\d+).*?\\]|[()] 

이다.

첫 번째 부분

,

\\[(\\d+).*?\\] 

는 (괄호 포함) 대괄호 사이에있는 모든 일치합니다. 정규 표현식 \\[[, \\]과 일치하며 ]과 일치합니다. 또한 \\d+은 하나 이상의 숫자를 의미합니다. .*?은 임의의 수의 문자와 일치합니다. ?은 욕심없는 일치를 보장합니다 (예 : ]까지). 괄호는 일치하는 그룹을 나타냅니다. 여기서 첫 번째 일치하는 그룹은 [ 뒤의 첫 번째 숫자 문자열입니다.

번째 부분

,

[()] 

일치 괄호.

모든 일치 항목은 \\1, 즉 첫 번째 일치 그룹으로 바뀝니다. 따라서 대괄호 사이의 문자열은이 대괄호 안의 첫 번째 숫자로 바뀝니다. 일치하는 그룹이 없으므로 괄호는 아무 것도 (빈 문자열)로 바뀝니다.

+0

정말 고마워요. 너는 천재 야!!! – user2427306

+0

@Sven Hohenstein 정규 표현식을 사용하는 것은 좋지만, 그것을 번역하고 gsub 표현식 내에서 무엇을하고 있는지 설명해 줄 수 있습니까? –

+0

@PauloCardoso 설명을 추가했습니다. –

0

이것은 아마도 귀하가 찾고있는 것일 수 있습니다.

s <- "(3 [97 98] [116 117] 200)" 
regmatches(s, gregexpr("[0-9]", s)) 

나는 정확히 편집을 이해하지 않지만, 업데이트 된 정규 표현식 "[0-9]"를 교체해야 만한다.

관련 문제