使用通配符r删除文本内容

问题描述 投票:0回答:1

我想删除作为矢量一部分的几个文本字符串的一部分。我要删除的实例是#。## oz。其中#是1到9(含)之间的任何整数。

FoodVector <- c("kraft easy mac cup 2.05oz each", "tuna kit bumble bee 3.05oz each", "lance cheddar cheese wh grain 1.50oz each", "some item 1.0oz")

结果应该是:

[1] kraft easy mac cup each 
[2] tuna kit bumble bee each
[3] lance cheddar cheese wh grain each
[4] some item 1.0oz

对于这样的事情,我通常会使用gsub()或str-replace()。但是我不知道通配符语言。例如

gsub("*.**oz", "", FoodVector)

结果:

Error in gsub("*.**", "", FoodVector) : 
  invalid regular expression '*.**', reason 'Invalid use of repetition operators'
r string str-replace gsub
1个回答
2
投票

您可以使用gsub删除一位数字的所有实例,然后依次删除.,两位数字和一个空格。

注意:您的描述是1到9之间的整数,没有空格。此解决方案查找0到9之间的数字,并查找空格,以匹配问题中显示的结果

gsub('\\d{1}\\.\\d{2}oz ', '', FoodVector)
# [1] "kraft easy mac cup each"           
# [2] "tuna kit bumble bee each"          
# [3] "lance cheddar cheese wh grain each"
# [4] "some item 1.0oz" 

要解决Rui在下面的观点,您可以允许空格位于d.ddoz之前或之后

FoodVector <- c(FoodVector, '1.23oz some words', 'more words 3.45oz')

gsub('\\d{1}\\.\\d{2}oz | \\d{1}\\.\\d{2}oz', '', FoodVector)
# [1] "kraft easy mac cup each"           
# [2] "tuna kit bumble bee each"          
# [3] "lance cheddar cheese wh grain each"
# [4] "some item 1.0oz"                   
# [5] "some words"                        
# [6] "more words" 
© www.soinside.com 2019 - 2024. All rights reserved.