[英]R: splitting a string between two characters using strsplit()
假設我有以下字符串:
s <- "ID=MIMAT0027618;Alias=MIMAT0027618;Name=hsa-miR-6859-5p;Derives_from=MI0022705"
我想恢復";"
之間的字符串和"="
得到以下輸出:
[1] "MIMAT0027618" "MIMAT0027618" "hsa-miR-6859-5p" "MI0022705"
我可以將strsplit()
與多個拆分元素一起使用嗎?
1) strsplit 與矩陣試試這個:
> matrix(strsplit(s, "[;=]")[[1]], 2)[2,]
[1] "MIMAT0027618" "MIMAT0027618" "hsa-miR-6859-5p" "MI0022705"
2) 使用 gsub進行strsplit
或使用帶有gsub
的strsplit
:
> strsplit(gsub("[^=;]+=", "", s), ";")[[1]]
[1] "MIMAT0027618" "MIMAT0027618" "hsa-miR-6859-5p" "MI0022705"
3)具有子或此使用的strsplit strsplit
與sub
:
> sub(".*=", "", strsplit(s, ";")[[1]])
[1] "MIMAT0027618" "MIMAT0027618" "hsa-miR-6859-5p" "MI0022705"
4)strapplyc或 this 在等號后提取連續的非分號:
> library(gsubfn)
> strapplyc(s, "=([^;]+)", simplify = unlist)
[1] "MIMAT0027618" "MIMAT0027618" "hsa-miR-6859-5p" "MI0022705"
添加了額外的strplit
解決方案。
我知道這是一個老問題,但我發現使用環視正則表達式來解決這個問題非常優雅:
library(stringr)
your_string <- '/this/file/name.txt'
result <- str_extract(string = your_string, pattern = "(?<=/)[^/]*(?=\\.)")
result
用一句話來說,
(?<=...)
部分在所需的字符串之前查找...
(在本例中為正斜杠)。[^/]*
然后在一行中查找盡可能多的不是正斜杠的字符(在本例中為name.txt
)。(?=...)
然后為所需的字符串后看起來...
(在這種情況下的特殊時期字符,它需要被轉義為\\\\.
這也適用於數據幀:
library(dplyr)
strings <- c('/this/file/name1.txt', 'tis/other/file/name2.csv')
df <- as.data.frame(strings) %>%
mutate(name = str_extract(string = strings, pattern = "(?<=/)[^/]*(?=\\.)"))
# Optional
names <- df %>% pull(name)
或者,就您而言:
your_string <- "ID=MIMAT0027618;Alias=MIMAT0027618;Name=hsa-miR-6859-5p;Derives_from=MI0022705"
result <- str_extract(string = your_string, pattern = "(?<=;Alias=)[^;]*(?=;)")
result # Outputs 'MIMAT0027618'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.