Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用numric子字符串动态字符(例如:$1000100个单位)_R_Regex_Gsub - Fatal编程技术网

如何使用numric子字符串动态字符(例如:$1000100个单位)

如何使用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

我正在尝试进行数据清理,需要根据特定的模式清理一些文本,但我对正则表达式还是比较陌生,基于,我会尝试一些简单的正则表达式进行数据清理(删除任何模式,如$1000&1000pcs)

下面是我的示例字符串:

[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]* ?