我想在数据列中的特定字符串之间添加一个-
。
此列包含以下字符串:
mmu-let-7a3
mmu-miR-19b1
mmu-miR-548d2
mmu-miR-450a1
-
必须位于最后一个字母字符之间,但仅当最后一个字母字符特别是a,b,c或d与最后一个数字字符之间时,但也必须位于最后一个数字字符之间1、2或3。
输出应如下所示
mmu-let-7a-3
mmu-miR-19b-1
mmu-miR-548d-2
mmu-miR-450a-1
是否存在可以使用gsub完成此操作的正则表达式代码?还是其他功能?
任何帮助将不胜感激。
答案 0 :(得分:2)
有多种方法可以实现此目的,但是由于您提到了// I want to concatenate this with some other strings
let s = String::from("Amelia");
// The following won't compile: you can't make an array of &str and String
assert_eq!(["Hello", ", ", s].concat(), "Hello, Amelia"); // WRONG
// However, &*s takes a reference to the str pointed to by s.
assert_eq!(["Hello", ", ", &*s].concat(), "Hello, Amelia"); // OK
,因此这里有一个使用正向后视的选项
(g)sub
或使用两个捕获组
sub("(?<=[a-d])([1-3])$", "-\\1", x, perl = T)
#[1] "mmu-let-7a-3" "mmu-miR-19b-1" "mmu-miR-548d-2" "mmu-miR-450a-1"
说明:
sub("([a-d])([1-3])$", "\\1-\\2", x)
匹配字母[a-d]
,"a"
,"b"
,"c"
"d"
在字符串末尾匹配[1-3]$
,"1"
和"2"
(由于"3"
字符串末尾锚定)$
答案 1 :(得分:2)
# let
x <- c("mmu-let-7a3", "mmu-miR-19b1", "mmu-miR-548d2", "mmu-miR-450a1", "mmu-miR-450g4")
sub("([a-d])([1-3])$", "\\1-\\2", x)
[1] "mmu-let-7a-3" "mmu-miR-19b-1" "mmu-miR-548d-2" "mmu-miR-450a-1" "mmu-miR-450g4"
答案 2 :(得分:2)
我们可以做到:
test <- "mmu-miR-450a1"
gsub("([a-d])([1-3])$","\\1-\\2",test)
[1] "mmu-miR-450a-1"
或使用stringr
:
stringr::str_replace_all(x,
"([a-d])([1-3])$","\\1-\\2")
[1] "mmu-let-7a-3" "mmu-miR-19b-1" "mmu-miR-548d-2"
[4] "mmu-miR-450a-1"