我不明白爲什麼我需要使用兩個反斜槓來防止反向引用的逆轉。下面,我將我詳細介紹如何發現我的問題:爲什麼當我在gsub中使用一個反斜槓時,R中的正則表達式反向引用被反轉了?
我想改變一個字符,看起來像這樣:
x <- 53/100 000
和改造它看起來是這樣的:
53/100000
下面是我提出這個問題之前的一些想法:
我以爲我可以使用函數gsub
刪除在/
字符之後發生的所有空格。不過,我認爲正則表達式解決方案可能更優雅/高效。
起初,我不知道如何在正則表達式反向引用,所以我想這:
> gsub("/.+\\s",".+",x) [1] "53.+000"
然後我讀,你可以使用\1
從this 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
是必需的。這裏發生了什麼?爲什麼我的反向引用被逆轉?
我現在明白了。我一定非常不幸,因爲「\ 1」被gsub渲染爲「\ 001」,我的模式是「100」。謝謝你的回答。 –