2015-05-22 152 views
-3

我使用這個正則表達式:R:正則表達式 - 幫助正則表達式匹配

b <- gsub("^http.*jpg$", "", a) 

爲了讓騎走這行: 「HTTP(無論).JPG」

但它無法正常工作。任何暗示都是值得歡迎的。

這是我的字符串「a」:

http://media.linio.com.pe/p/hp-1987-043329-sprite.jpgHPHP-DesktopAll-in-OneIntelCeleron18.5''500GB4GB-...S/.1,399.00S/.1,099.00-21%http://media.linio.com.pe/p/hp-7585-499619-sprite.jpgHPHP-DesktopAllInOne205G1AMDDual-CoreE1-250018.5...S/.1,499.00S/.1,099.00-26%http://media.linio.com.pe/p/intel-8786-003309-sprite.jpgIntelIntel-ComputadoraCorei544604taGeneraciónLEDHP1...S/.1,990.00S/.1,699.00-14%http://media.linio.com.pe/p/neff-8502-46539-sprite.jpgNeffNeff-MochilaUnisexScholar-Amarillo,NegroyBlancoS/.229.90S/.79.90-65%http://media.linio.com.pe/p/halion-3051-744329-sprite.jpgHalionIntel-ComputadoraDualCore1.7Ghz750GB2GB+Led19''...S/.1,499.00S/.1,299.00-13%IntelIntel-CPUCompletoCorei54taGeneracion4GBDDR3500G...S/.1,701.00S/.1,499.99-11%http://media.linio.com.pe/p/hp-5264-7511711-sprite.jpgHPHP-DesktopAll-in-OneIntelDualCore18.5''500GB4GB...S/.1,299.00S/.1,290.00-0%http://media.linio.com.pe/p/amd-1909-183119-sprite.jpgAMDAmd-ComputadoraA10780012Núcleos320GB4GB-NegroS/.1,800.00http://media.linio.com.pe/p/neff-9658-55539-sprite.jpgNeffNeff-MochilaUnisexDaily-AmarilloyCelesteS/.149.90S/.45.00-69%http://media.linio.com.pe/p/amd-5625-212409-sprite.jpgAMDAmd-ComputadoraDualCore4GB+MonitorLedHP+Teclad...S/.1,350.00S/.1,050.00-22%http://media.linio.com.pe/p/amd-8027-952409-sprite.jpgAMDAmd-ComputadoraA107850K4.0Ghz.12NúcleosdeProce...S/.2,200.00S/.1,779.00-19%http://media.linio.com.pe/p/amd-8208-462409-sprite.jpgAMDAmd-ComputadoraA107700K3.8Ghz.10NúcleosdeProce...S/.2,000.00S/.1,559.00-22% 

所需的輸出:

HPHP-DesktopAll-in-OneIntelCeleron18.5''500GB4GB-...S/.1,399.00S/.1,099.00-21%HPHP-DesktopAllInOne205G1AMDDual-CoreE1-250018.5...S/.1,499.00S/.1,099.00-26%IntelIntel-ComputadoraCorei544604taGeneraciónLEDHP1...S/.1,990.00S/.1,699.00-14%NeffNeff-MochilaUnisexScholar-Amarillo,NegroyBlancoS/.229.90S/.79.90-65%HalionIntel-ComputadoraDualCore1.7Ghz750GB2GB+Led19''...S/.1,499.00S/.1,299.00-13%IntelIntel-CPUCompletoCorei54taGeneracion4GBDDR3500G...S/.1,701.00S/.1,499.99-11%HPHP-DesktopAll-in-OneIntelDualCore18.5''500GB4GB...S/.1,299.00S/.1,290.00-0%AMDAmd-ComputadoraA10780012Núcleos320GB4GB-NegroS/.1,800.00NeffNeff-MochilaUnisexDaily-AmarilloyCelesteS/.149.90S/.45.00-69%AMDAmd-ComputadoraDualCore4GB+MonitorLedHP+Teclad...S/.1,350.00S/.1,050.00-22%AMDAmd-ComputadoraA107850K4.0Ghz.12NúcleosdeProce...S/.2,200.00S/.1,779.00-19%AMDAmd-ComputadoraA107700K3.8Ghz.10NúcleosdeProce...S/.2,000.00S/.1,559.00-22% 
+3

什麼是期望的輸出?您的示例字符串不會以「jpg」結尾,因此沒有匹配。 – MrFlick

+1

擺脫位置錨('^'和'$'),它應該做你想做的。 –

+0

@MrFlick,我已經添加了一些期望的輸出。是相同的字符串,但沒有以http開始並以.jpg結尾的鏈接。 –

回答

4

您似乎想要一個非貪婪的非錨定表達式。使用

b <- gsub("http.*?jpg", "", a) 

得到您想要的輸出。

+0

謝謝,@MrFlick。你能否解釋我的代碼和你的代碼之間的區別? 「^ http。* jpg $」 –

+1

我的代碼是非錨定的(沒有'^'或'$')和非貪婪的('。*?'vs'。*'匹配最小的部分)。如果您要使用正則表達式,您應該熟悉一些術語。嘗試使用Google搜索。 – MrFlick

0

問題最有可能的是,正則表達式模式在jpg$,其中$標記的末尾結束串。 但是,您的文字並沒有以jpg結尾,所以沒有匹配,因此沒有替換。

正如評論中所述,如果您刪除字符串開始^和結束$ gsub應替換所有匹配的指標。

編輯:對不起,從您更新的預期輸出,你需要一個非貪婪的正則表達式模式。它會盡快匹配(即儘可能小的字符串,或者在第一次關閉jpg時),而不是嘗試匹配最長的字符串。

這裏有一些examples using gsub

+0

嗯,我明白你的觀點。它不會工作,因爲它是一個字符串,而不是以「jpg」結尾。我想分成兩步: 1)將字符串分成多個部分......一個是「http ... jpg」。 2)用「」替換這個「http ... jpg」。 任何幫助。謝謝 –

+0

MrFlick上面的答案是正確的答案。請接受它,如果你同意:) – Mangostaniko