如何使用 R、stringr 等动态删除或替换字符串中不确定数字的单词?
How to dynamically remove or replace words with uncertain numbers in a string using R, stringr etc?
假设我有数据:
s1 <-'aaa'
s2 <- 'bbb'
s <- 'aaa bbb poefaaapeka 111bbbcde'
s1和s2是两个词。我想从 s 中删除或替换。所以结果应该是:
'poefaaapeka 111bbbcde'
请注意,我只删除 aaa 是一个单词。如果换句话说,我需要保留它。在我的数据中,我不确定每次有多少个单词以及单词是什么。所以我不能使用 pattern='aaa|bbb' 这样的操作。另外,我必须把这些词一起去掉,所以模式应该是这样的:
s1|s2|s3...
这样我就可以删除所有不断变化的单词。
我们可以尝试构建一个正则表达式交替,它将同时针对 s1
和 s2
项进行删除:
s1 <-'aaa'
s2 <- 'bbb'
regex <- paste0("\b(?:", s1, "|", s2, ")\b\s*")
s <- 'aaa bbb poefaaapeka 111bbbcde'
output <- sub("\s*$", "", gsub(regex, "", s))
s
output
[1] "aaa bbb poefaaapeka 111bbbcde"
[1] "poefaaapeka 111bbbcde"
此处使用的正则表达式模式是 \b(?:aaa|bbb)\b\s*
,请注意,trim 在 aaa
或 bbb
项的右侧还有任意数量的空格.如果输入中的第一项是 aaa
或 bbb
,则需要额外调用 sub
。跟我们不能trim两边空格有关(怕连词),所以我们武断的选择只在右边做。
假设我有数据:
s1 <-'aaa'
s2 <- 'bbb'
s <- 'aaa bbb poefaaapeka 111bbbcde'
s1和s2是两个词。我想从 s 中删除或替换。所以结果应该是:
'poefaaapeka 111bbbcde'
请注意,我只删除 aaa 是一个单词。如果换句话说,我需要保留它。在我的数据中,我不确定每次有多少个单词以及单词是什么。所以我不能使用 pattern='aaa|bbb' 这样的操作。另外,我必须把这些词一起去掉,所以模式应该是这样的:
s1|s2|s3...
这样我就可以删除所有不断变化的单词。
我们可以尝试构建一个正则表达式交替,它将同时针对 s1
和 s2
项进行删除:
s1 <-'aaa'
s2 <- 'bbb'
regex <- paste0("\b(?:", s1, "|", s2, ")\b\s*")
s <- 'aaa bbb poefaaapeka 111bbbcde'
output <- sub("\s*$", "", gsub(regex, "", s))
s
output
[1] "aaa bbb poefaaapeka 111bbbcde"
[1] "poefaaapeka 111bbbcde"
此处使用的正则表达式模式是 \b(?:aaa|bbb)\b\s*
,请注意,trim 在 aaa
或 bbb
项的右侧还有任意数量的空格.如果输入中的第一项是 aaa
或 bbb
,则需要额外调用 sub
。跟我们不能trim两边空格有关(怕连词),所以我们武断的选择只在右边做。