2014-05-08 2 views
-1

숫자, 대괄호 및 문자가 섞여있는 문자열이 있습니다. 나는 그들을 다른 행으로 나누고 싶다. 그것을 할 수있는 방법은 무엇입니까? 당신의 도움을 주셔서 감사합니다.분할 문자열 (숫자, 대괄호 및 문자가 섞여 있음) R

예를 들어, 문자열은 "3. abc4(). 3. efg3() a() 4.ed."과 같습니다. 최종 결과는 다음과 같을 것이다 : 당신은 정규 표현식이 할 수

3. abc4(). 
3. efg 3() a() 
4. ed. 
+0

분할에 대한 규칙/근거는 무엇입니까? –

+0

숫자를 기반으로 문자열을 다시 포맷해야합니다. – lucyh

답변

1

. 여기에 하나의 방법이 있습니다.

x <- "3. abc4(). 3. efg3() a() 4.ed." 
m <- gregexpr("\\d\\..*?(?=\\s*\\d\\.|$)",x, perl=T) 
v <- regmatches(x,m)[[1]] 
v; #[1] "3. abc4()." "3. efg3() a()" "4.ed." 

이렇게하면 각각의 개별 요소가있는 벡터가됩니다. 그럼 당신이 원하는 경우에 당신은 당신이 정규 표현식을 처음 사용하는 경우

cat(paste(v, collapse="\n")) 
# 3. abc4(). 
# 3. efg3() a() 
# 4.ed. 

(그렇지 않으면 개행 문자가 "\ n을"로 인쇄 cat를 사용하여) 그를 인쇄 한 후 사이에 줄 바꿈으로 그들을 결합 할 수 있습니다, 그것은 보일 수 있습니다 비트 미친,하지만 그것은 하나의 자리, 다음에 소수점을 찾습니다. 다음은 비 탐욕적 인 일치를합니다. 다음에 오는 것이 공백을두고 다른 숫자 기간 콤보 또는 문자열의 끝일 때 멈 춥니 다.

+0

정규 표현식에 대해 전혀 알지 못합니다. 귀하의 답변은 매우 유용합니다. 고마워. 하지만 숫자의 범위가 0-115이면 정규 표현식을 어떻게 바꿀 수 있습니까? – lucyh

+0

글쎄, 정규 표현식은 특정 숫자 범위에 대해서는 좋지 않지만, 적어도 하나 이상의 숫자'm <- gregexpr ("\\ d + \\ .. *? (? = \\ s * \\) d + \\. | $) ", x, perl = T)' – MrFlick

+0

좋습니다. 그 작품. 고맙습니다. – lucyh