如果我有这些字符串:
mystrings <- c("X2/D2/F4",
"X10/D9/F4",
"X3/D22/F4",
"X9/D22/F9")
Run Code Online (Sandbox Code Playgroud)
我怎样才能提取出来2,9,22,22.这些字符/位于第一个字符之间和之后/.
我想以矢量化方式执行此操作,并添加新列,transfrom如果可能的话,我熟悉它.
我认为这个正则表达式让我在附近的所有角色附近\:
^.*\\'(.*)'\\.*$
Run Code Online (Sandbox Code Playgroud)
42-*_*42- 29
> gsub("(^.+/[A-Z]+)(\\d+)(/.+$)", "\\2", mystrings)
[1] "2" "9" "22" "22"
Run Code Online (Sandbox Code Playgroud)
您将"读取"(或"解析")正则表达式模式将任何匹配的字符串拆分为三个部分:
1)任何包括第一个正斜杠后跟一系列大写字母的东西,
2)在下一个斜杠之前的序列中的任何数字(="\ d"),
3)从下一个斜线到结束.
然后只返回第二部分....
不匹配的字符串将不加改变地返回.
str_extract从stringr包中使用:
as.numeric(str_extract(mystrings, perl('(?<=/[A-Z])[0-9]+(?=/)')))
Run Code Online (Sandbox Code Playgroud)
@Arun偷了我的雷声,所以我给出了我最初的啰嗦的例子.
cut.to.pieces <- strsplit(mystrings, split = "/")
got.second <- lapply(cut.to.pieces, "[", 2)
get.numbers <- unlist(got.second)
as.numeric(gsub(pattern = "[[:alpha:]]", replacement = "", x = get.numbers, perl = TRUE))
[1] 2 9 22 22
Run Code Online (Sandbox Code Playgroud)