[英]R programming - How do I remove a string that appears multiple times in a text using gregexpr?
[英]R - extracting multiple patterns from string using gregexpr
我正在使用一個數據集,其中有一個描述不同產品的列。 在產品說明中還包括產品的重量,這是我想提取的。 我的問題是某些產品采用雙包裝包裝,這意味着說明以“ 2x”開頭,而實際重量在說明的末尾。 例如:
x = '2x pet food brand 12kg'
我想做的就是將其縮短到2x12kg。 我不太擅長在R中使用regexp,並希望這里有人可以幫助我。
我嘗試通過以下方式使用gregexp進行此操作:
m <- gregexpr("(^[0-9]+x [0-9]+kg)", x)
不幸的是,這只給了我10公斤,不包括2倍
我將不勝感激。
編輯----
在解決了最初的問題之后,我發現數據中有一些實例具有不同的格式,我也想提取這些實例:
x = 'Pet food brand 15x85g'
# Should be:
x = '15x85g'
我試圖在gsub中處理OR語句,例如:
m <- gsub('^([0-9]+x)?[^0-9]*([0-9.]+kg)|([0-9]+x)?[^0-9]*([0-9.]+g)', '\\1\\2', x)
#And
m <- gsub('^([0-9]+x)?[^0-9]*([0-9.]+(kg|g)), x)
盡管這仍然可以提取公斤,但只會刪除帶有g的實例,並保留字符串的其余部分,例如:
x = 'Pet food brand '
或者使用以下命令第二次運行gsub:
m <- gsub('([0-9]+x[0-9]+g)', '\\1', x)
后一個選項根本不提取產品的重量,只是使字符串完整無缺。
很抱歉,沒有注意到字符串的格式之前有所不同。 再次,任何幫助將不勝感激。
您可以使用此正則表達式
m = gregexpr("([0-9]+x|[0-9.]+kg)", string, ignore.case = T)
result = regmatches(string, m)
r = paste0(unlist(result),collapse = "")
對於string = "2x pet food brand 12kg"
您將獲得"2x12kg"
如果千克帶有小數,這也可以使用:
對於string = "23x pet food 23.5Kg"
您將獲得"23x23.5Kg"
(編輯以糾正@R。Schifini指出的錯誤)
您可以像這樣使用正則表達式:
x <- '2x pet food brand 12kg'
gsub('^([0-9]+x)?[^0-9]*([0-9]+kg)', '\\1\\2', x)
## "2x12kg"
即使字符串開頭沒有“ 2x”,這也會使您獲得幫助:
x <- 'pet food brand 12kg'
gsub('^([0-9]+x)?[^0-9]*([0-9]+kg)', '\\1\\2', x)
## "12kg"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.