简体   繁体   English

如何使用R中的RegEx替换字符串中的字符

[英]How to replace a character in a string using RegEx in R

I am trying to replace a certain character in string but as this pattern is recurring I have thought to replace this iteratively using RegExes if it's even possible. 我正在尝试替换字符串中的某个字符但是由于这种模式反复发生,我曾想过如果可能的话,使用RegExes迭代替换它。 For example consider a link http://www.bbc.co.uk/food/ingredients/by/letter/a 例如,请考虑链接http://www.bbc.co.uk/food/ingredients/by/letter/a

I want to replace the last 'a' with 'b', then a 'c', a 'd' and so-on till 'z' iteratively. 我想用'b'替换最后的'a',然后用'c','d'替换,直到'z'迭代。 The RegEx to work with this is as simple as: 使用RegEx可以很简单:

http:\\/\\/www\\.bbc\\.co\\.uk\\/food\\/ingredients\\/by\\/letter\\/[az]

this would validate the string but I'd like to automate the process of link generation. 这将验证字符串,但我想自动化链接生成过程。 I am quite new to 'R' and I would like to know if something like this is possible. 我对'R'很新,我想知道这样的事情是否可行。

You can create such a list of links as follows with paste0 : 您可以使用paste0创建如下链接列表:

l <- paste0("http://www.bbc.co.uk/food/ingredients/by/letter/", letters)

which results in the following list: 这导致以下列表:

> 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"

Extract the directory name (ie everything before /a) and then append each letter using the built-in variable letters : 提取目录名称(即/ a之前的所有内容),然后使用内置变量letters附加每个letters

u <- "http://www.bbc.co.uk/food/ingredients/by/letter/a" # input string
file.path(dirname(u), letters)

which gives this character vector: 它给出了这个字符向量:

 [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"

Another option: 另外一个选项:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM