如何在 R 中使用正则表达式替换字符串中的字符

4
我试图替换字符串中的某个字符,但由于该模式是重复出现的,我想使用正则表达式进行迭代替换,如果可能的话。 例如,考虑一个链接http://www.bbc.co.uk/food/ingredients/by/letter/a 我想迭代地将最后一个'a'替换为'b',然后是'c'、'd'等,直到'z'。 与此相关的正则表达式非常简单: http:\/\/www\.bbc\.co\.uk\/food\/ingredients\/by\/letter\/[a-z] 这将验证字符串,但我想自动化链接生成过程。我对'R'相当陌生,我想知道是否有类似的方法。
3个回答

3
您可以使用paste0创建如下的链接列表:
l <- paste0("http://www.bbc.co.uk/food/ingredients/by/letter/", letters)

这导致以下列表的生成:
> l
 [1] "http://www.bbc.co.uk/food/ingredients/by/letter/a"
 [2] "http://www.bbc.co.uk/food/ingredients/by/letter/b"
 [3] "http://www.bbc.co.uk/food/ingredients/by/letter/c"
 [4] "http://www.bbc.co.uk/food/ingredients/by/letter/d"
 [5] "http://www.bbc.co.uk/food/ingredients/by/letter/e"
 [6] "http://www.bbc.co.uk/food/ingredients/by/letter/f"
 [7] "http://www.bbc.co.uk/food/ingredients/by/letter/g"
 [8] "http://www.bbc.co.uk/food/ingredients/by/letter/h"
 [9] "http://www.bbc.co.uk/food/ingredients/by/letter/i"
[10] "http://www.bbc.co.uk/food/ingredients/by/letter/j"
[11] "http://www.bbc.co.uk/food/ingredients/by/letter/k"
[12] "http://www.bbc.co.uk/food/ingredients/by/letter/l"
[13] "http://www.bbc.co.uk/food/ingredients/by/letter/m"
[14] "http://www.bbc.co.uk/food/ingredients/by/letter/n"
[15] "http://www.bbc.co.uk/food/ingredients/by/letter/o"
[16] "http://www.bbc.co.uk/food/ingredients/by/letter/p"
[17] "http://www.bbc.co.uk/food/ingredients/by/letter/q"
[18] "http://www.bbc.co.uk/food/ingredients/by/letter/r"
[19] "http://www.bbc.co.uk/food/ingredients/by/letter/s"
[20] "http://www.bbc.co.uk/food/ingredients/by/letter/t"
[21] "http://www.bbc.co.uk/food/ingredients/by/letter/u"
[22] "http://www.bbc.co.uk/food/ingredients/by/letter/v"
[23] "http://www.bbc.co.uk/food/ingredients/by/letter/w"
[24] "http://www.bbc.co.uk/food/ingredients/by/letter/x"
[25] "http://www.bbc.co.uk/food/ingredients/by/letter/y"
[26] "http://www.bbc.co.uk/food/ingredients/by/letter/z"

3
提取目录名称(即 /a 之前的所有内容),然后使用内置变量 letters 追加每个字母。
u <- "http://www.bbc.co.uk/food/ingredients/by/letter/a" # input string
file.path(dirname(u), letters)

这会得到一个字符向量:

 [1] "http://www.bbc.co.uk/food/ingredients/by/letter/a"
 [2] "http://www.bbc.co.uk/food/ingredients/by/letter/b"
 [3] "http://www.bbc.co.uk/food/ingredients/by/letter/c"
 [4] "http://www.bbc.co.uk/food/ingredients/by/letter/d"
 [5] "http://www.bbc.co.uk/food/ingredients/by/letter/e"
 [6] "http://www.bbc.co.uk/food/ingredients/by/letter/f"
 [7] "http://www.bbc.co.uk/food/ingredients/by/letter/g"
 [8] "http://www.bbc.co.uk/food/ingredients/by/letter/h"
 [9] "http://www.bbc.co.uk/food/ingredients/by/letter/i"
[10] "http://www.bbc.co.uk/food/ingredients/by/letter/j"
[11] "http://www.bbc.co.uk/food/ingredients/by/letter/k"
[12] "http://www.bbc.co.uk/food/ingredients/by/letter/l"
[13] "http://www.bbc.co.uk/food/ingredients/by/letter/m"
[14] "http://www.bbc.co.uk/food/ingredients/by/letter/n"
[15] "http://www.bbc.co.uk/food/ingredients/by/letter/o"
[16] "http://www.bbc.co.uk/food/ingredients/by/letter/p"
[17] "http://www.bbc.co.uk/food/ingredients/by/letter/q"
[18] "http://www.bbc.co.uk/food/ingredients/by/letter/r"
[19] "http://www.bbc.co.uk/food/ingredients/by/letter/s"
[20] "http://www.bbc.co.uk/food/ingredients/by/letter/t"
[21] "http://www.bbc.co.uk/food/ingredients/by/letter/u"
[22] "http://www.bbc.co.uk/food/ingredients/by/letter/v"
[23] "http://www.bbc.co.uk/food/ingredients/by/letter/w"
[24] "http://www.bbc.co.uk/food/ingredients/by/letter/x"
[25] "http://www.bbc.co.uk/food/ingredients/by/letter/y"
[26] "http://www.bbc.co.uk/food/ingredients/by/letter/z"

感谢 @g-grothendieck 的帮助。 - shanky_thebearer

0

另一个选项:

library(stringi)
v <- "http://www.bbc.co.uk/food/ingredients/by/letter/a"
stri_replace_last(v, letters, regex = "[a-z]")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接