gpt4 book ai didi

r - 如何用数字对动态字符进行子串化(例如 : $1000, 100 个单位)

转载 作者:行者123 更新时间:2023-12-02 06:27:26 24 4
gpt4 key购买 nike

我正在尝试进行数据清理,需要根据特定模式清理一些文本,但我对正则表达式仍然很陌生,基于 RegExCheatsheet ,我尝试了一些简单的正则表达式来清理数据(删除任何模式,如 $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 ""

问题是否有更好的(更动态的正则表达式)来捕获“$200/5000pcs”模式?请注意,$ 和 pcs 的数据范围是未知的,可能从 1 开始到 10000 或更多。

预期结果(子字符串后):

[1] "(Promotion) stuff ABC"
[2] "(Trial) stuff XYZ"
[3] "(Test) stuff WER"

欢迎任何帮助和评论,谢谢!

最佳答案

我们可能会做以下事情

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"

这将替换空格后跟 $ 和至少一位数字或至少一位数字后跟 pcs。因此,与您的方法相比,我添加了 | 作为 OR 运算符并使用 + 来允许一个或多个数字(以及 \\d 与您的 [0-9] 相同)。


上述方法假定目标不在字符串的开头。否则我们可能会做

gsub("  ", " ", trimws(gsub("\\$\\d+|\\d+pcs", "", "$200  $300  stuff XYZ 200pcs")))
# [1] "stuff XYZ"

处理前导/尾随空格空白和多个空格。

关于r - 如何用数字对动态字符进行子串化(例如 : $1000, 100 个单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54077138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com