2017-09-18 11 views
1

왜 내 역 참조의 역전을 방지하기 위해 두 개의 백 슬래시를 사용해야하는지 이해할 수 없습니다. 아래에, 나는 내 문제를 발견 I 세부 방법 : 다음과 같이 할gsub에 하나의 백 슬래시를 사용할 때 R의 역 정규화 역 참조가 취소되는 이유는 무엇입니까?

x <- 53/100 000

그리고 변환 :

나는이처럼 보이는 문자를 변환하고 싶었

53/100000

다음은이 질문을하기 전에 내가 가진 몇 가지 아이디어입니다.

나는 gsub 함수를 사용하여 / 문자 다음에 오는 모든 공백을 제거 할 수 있습니다. 그러나, 나는 정규식 솔루션이 더 우아하고 효율적일 수 있다고 생각했다.

처음에는 정규식에서 역 참조하는 방법을 알고하지 않았다, 그래서 나는이 시도 :

> gsub("/.+\\s",".+",x) [1] "53.+000"

그럼 난 당신이 this website에서 \1를 사용하여 캡처 패턴을 역 참조 할 수 있음을 읽어 보시기 바랍니다. 그래서 이것을 사용하기 시작

> gsub("/.+\\s","\1",x) [1] "53\001000"

그런 다음 나는 역 참조가 와일드 카드 매치를 고려 것을 깨달았다. 그러나 나는 / 문자를 유지하고 싶었습니다. 그래서 나는 그것을 다시 추가 : 다음 다른 것들의 무리를 시도

> gsub("/.+\\s","/\1",x) [1] "53/\001000"

,하지만 난 여분의 백 슬래시를 추가하고 괄호 안에 내 와일드 카드로 묶어을 고정 :

> gsub("/(.+)\\s","/\\1",x) [1] "53/100000"

을 또한 패턴의 시작 부분에 왼쪽 괄호를 삽입하여 / 문자를 대체물에서 제거 할 수있었습니다.

> gsub("(/.+)\\s","\\1",x) [1] "53/100000"

흠, 괄호와 여분의 백 슬래시가 필요했습니다. 괄호는 내가 역 참조하는 텍스트의 일부가 무엇인지 나타내는 것으로 생각하기 때문에 생각합니다.

두 개의 백 슬래시가 필요한 이유는 무엇입니까?the reference website에서 \l 만 필요하다고합니다. 무슨 일 이니? 왜 내 역 참조가 바뀌 었습니까?

답변

2

"\ 1"을 gsub로 전달하기 전에 이스케이프 문자로 구문 분석하지 않도록 여분의 백 슬래시가 필요합니다. "\\ 1"은 gsub에 의해 정규 표현식 \ 1로 읽혀집니다.

+0

이제는 이해합니다. 나는 "\ 1"이 gsub에 의해 "\ 001"으로 표현되고, 나의 패턴이 "100"이기 때문에 매우 불행했을 것이다. 답변 해 주셔서 감사합니다. –