2017-09-18 65 views
1

我不明白爲什麼我需要使用兩個反斜槓來防止反向引用的逆轉。下面,我將我詳細介紹如何發現我的問題:爲什麼當我在gsub中使用一個反斜槓時,R中的正則表達式反向引用被反轉了?

我想改變一個字符,看起來像這樣:

x <- 53/100 000

和改造它看起來是這樣的:

53/100000

下面是我提出這個問題之前的一些想法:

我以爲我可以使用函數gsub刪除在/字符之後發生的所有空格。不過,我認爲正則表達式解決方案可能更優雅/高效。

起初,我不知道如何在正則表達式反向引用,所以我想這:

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

然後我讀,你可以使用\1this website反向引用攝像圖案。於是我開始用這個:

> 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

需要額外的反斜槓,以便R在將它傳遞給gsub之前不會將「\ 1」解析爲轉義字符。 「\\ 1」被gsub讀爲正則表達式\ 1。

+0

我現在明白了。我一定非常不幸,因爲「\ 1」被gsub渲染爲「\ 001」,我的模式是「100」。謝謝你的回答。 –

相關問題