使用 grepl 替换解析的正则表达式
Regular expression parsed with grepl replacement
objective是解析正则表达式并替换匹配的模式。
考虑这个例子:
data <- c("cat 6kg","cat g250", "cat dog","cat 10 kg")
我必须找到所有出现的 cat
和一个数字 [0-9]
。为此:
found <- data[grepl("(^cat.[a-z][0-9])|(^cat.[0-9])",data)]
found
[1] "cat 6kg" "cat g250" "cat 10 kg"
下一步是用字符串 cat
替换 found
的每个元素。根据 Stack 问题,我尝试从包 (gsubfn) gsub、sub 和 gsubfn() 20219311:
gsubfn("((^cat.[a-z][0-9])|(^cat.[0-9]))", "cat",data)
[1] "catkg" "cat50" "cat dog" "cat0 kg"
这不是预期的结果:
[#] "cat" "cat" "cat dog" "cat"
我想我漏掉了一点。如果能得到任何帮助,我将不胜感激。谢谢。
简单, 只需将字符串 cat
分配给匹配元素即可。这将用 cat
替换元素中存在的所有字符
> data <- c("cat 6kg","cat g250", "cat dog","cat 10 kg")
> data[grepl("(^cat.[a-z][0-9])|(^cat.[0-9])",data)] <- "cat"
> data
[1] "cat" "cat" "cat dog" "cat"
或
> data <- c("cat 6kg","cat g250", "cat dog","cat 10 kg")
> data[grepl("^cat.[a-z]?[0-9]",data)] <- "cat"
> data
[1] "cat" "cat" "cat dog" "cat"
你也可以
sub('\s*dog(*SKIP)(*F)|(?<=cat).*', '', data, perl=TRUE)
#[1] "cat" "cat" "cat dog" "cat"
或者
sub('(cat)\s*([0-9]|[a-z][0-9]).*$', '\1', data)
#[1] "cat" "cat" "cat dog" "cat"
试试这个:
gsub('(\w?[0-9].*)','',data)
#[1] "cat " "cat " "cat dog" "cat "
objective是解析正则表达式并替换匹配的模式。
考虑这个例子:
data <- c("cat 6kg","cat g250", "cat dog","cat 10 kg")
我必须找到所有出现的 cat
和一个数字 [0-9]
。为此:
found <- data[grepl("(^cat.[a-z][0-9])|(^cat.[0-9])",data)]
found
[1] "cat 6kg" "cat g250" "cat 10 kg"
下一步是用字符串 cat
替换 found
的每个元素。根据 Stack 问题,我尝试从包 (gsubfn) gsub、sub 和 gsubfn() 20219311:
gsubfn("((^cat.[a-z][0-9])|(^cat.[0-9]))", "cat",data)
[1] "catkg" "cat50" "cat dog" "cat0 kg"
这不是预期的结果:
[#] "cat" "cat" "cat dog" "cat"
我想我漏掉了一点。如果能得到任何帮助,我将不胜感激。谢谢。
简单, 只需将字符串 cat
分配给匹配元素即可。这将用 cat
> data <- c("cat 6kg","cat g250", "cat dog","cat 10 kg")
> data[grepl("(^cat.[a-z][0-9])|(^cat.[0-9])",data)] <- "cat"
> data
[1] "cat" "cat" "cat dog" "cat"
或
> data <- c("cat 6kg","cat g250", "cat dog","cat 10 kg")
> data[grepl("^cat.[a-z]?[0-9]",data)] <- "cat"
> data
[1] "cat" "cat" "cat dog" "cat"
你也可以
sub('\s*dog(*SKIP)(*F)|(?<=cat).*', '', data, perl=TRUE)
#[1] "cat" "cat" "cat dog" "cat"
或者
sub('(cat)\s*([0-9]|[a-z][0-9]).*$', '\1', data)
#[1] "cat" "cat" "cat dog" "cat"
试试这个:
gsub('(\w?[0-9].*)','',data)
#[1] "cat " "cat " "cat dog" "cat "