如何使用numric子字符串动态字符(例如:$1000100个单位)
我正在尝试进行数据清理,需要根据特定的模式清理一些文本,但我对正则表达式还是比较陌生,基于,我会尝试一些简单的正则表达式进行数据清理(删除任何模式,如$1000&1000pcs) 下面是我的示例字符串:如何使用numric子字符串动态字符(例如:$1000100个单位),r,regex,gsub,R,Regex,Gsub,我正在尝试进行数据清理,需要根据特定的模式清理一些文本,但我对正则表达式还是比较陌生,基于,我会尝试一些简单的正则表达式进行数据清理(删除任何模式,如$1000&1000pcs) 下面是我的示例字符串: [1] "(Promotion) stuff ABC 1pcs" [2] "(Trial) $200 stuff XYZ 200pcs" [3] "(Test) $1000 stuff WER 5000pcs" 我试过下面的方法 x <- c("(Promotion) stuff ABC
[1] "(Promotion) stuff ABC 1pcs"
[2] "(Trial) $200 stuff XYZ 200pcs"
[3] "(Test) $1000 stuff WER 5000pcs"
我试过下面的方法
x <- c("(Promotion) stuff ABC 1pcs",
"(Trial) $200 stuff XYZ 20pcs",
"(Test) $1000 stuff WER 5000pcs")
gsub('$[0-9][0-9][0-9][0-9]','',x) #replace all $200, $1000 & etc.. into ""
gsub('[0-9][0-9][0-9][0-9]pcs','',x) #replace all 1pcs, 20pcs, 5000pcs & etc.. into ""
欢迎任何帮助和评论,谢谢 我们可以这样做
x <- c("(Promotion) stuff ABC 1pcs", "(Trial) $200 stuff XYZ 200pcs", "(Test) $1000 stuff WER 5000pcs")
gsub(" (\\$\\d+|\\d+pcs)", "", x)
# [1] "(Promotion) stuff ABC" "(Trial) stuff XYZ" "(Test) stuff WER"
它处理前导/尾随空格、空格和多个空格。使用
gsub
我们可以从字符串中删除任何包含数字和可选$
参数的单词
gsub("\\$?[0-9]+\\w+", "", x)
#[1] "(Promotion) stuff ABC " "(Trial) stuff XYZ " "(Test) stuff WER "
一个相当新手的回答:
library(tidyverse)
x <- c("(Promotion) stuff ABC 1pcs", "(Trial) $200 stuff XYZ 200pcs", "(Test) $1000 stuff WER 5000pcs")
x %>%
str_remove_all("\\$(?=[0-9])") %>%
str_remove_all("\\d") %>%
str_remove_all("pcs")
结果相同,但时间更长:
#"(Promotion) stuff ABC " "(Trial) stuff XYZ " "(Test) stuff WER "
您可以使用此正则表达式,它捕获任何内部没有空格且至少有一个数字的连续文本,无论是在内部还是在开头或结尾
[^\s]*\d+[^\s]* ?
并将其替换为空字符串
这对这样的字符串不起作用
1000美元的东西是5000个其中$1000
在开头。你可以尝试这种模式\$?\d+(\w{3})?
嗨@Ranak Shah,我刚刚试过。我在200美元后加200件的时候工作,例如:““(试用)$200件XYZ 200件”>”(试用)件XYZ“;但如果200件电脑后面跟着200美元,可能不起作用。@yc.koong我不确定我是否得到了它,但它可以与gsub(“\\$?[0-9]+\\w+”,“,”如果200件电脑后面跟着200美元,则可以工作“
。你是说别的吗?@Ranak Shah,对不起,我犯了愚蠢的错误,输入错误x
。你的代码运行得很好!我确实试过“gsub”(\\$?[0-9]+\\w+”,“(试用)$200件XYZ 200件”),结果我得到(试用)件XYZ”
,另一次试过gsub(\\$?[0-9]+\\w+”,“,“如果200件跟在$200后面工作”)
,结果我得到“如果跟在后面工作”
。谢谢
x %>%
str_remove_all("\\$(?=[0-9]+)") %>%
str_remove_all("\\d|pcs")
#"(Promotion) stuff ABC " "(Trial) stuff XYZ " "(Test) stuff WER "
[^\s]*\d+[^\s]* ?