[英]String split using RegEx in R
假設我們有以下字符串。
str <- '<a><b><c>';
我需要拆分它,以便輸出是'a'
, 'b'
, 'c'
的向量。
基本上我可能需要一個RegEx拆分函數,它從原始字符串中取出<(*)>
實例並將它們添加到一個新的向量中。
str <- '<a><b><c>'
str <- gsub('<|>','',str)
str <- unlist(strsplit(str,'',fixed=TRUE)) # or: strsplit(str,'',fixed=TRUE)[[1]]
得到:
> str
[1] "a" "b" "c"
響應您的評論:
str2 <- '<ab><bc><cd>'
str2 <- unlist(strsplit(str2,'><',fixed=TRUE)) # or: strsplit(str2,'><',fixed=TRUE)[[1]]
str2 <- gsub('<|>','',str2)
得到:
> str2
[1] "ab" "bc" "cd"
1)strsplit / gsub刪除<
字符,然后按>
拆分>
。 (人們可能已經預料到這會在最后留下一個零字符組件,但幸運的是,由於strsplit
工作方式不會發生這種情況。)此解決方案特別短,不使用任何包。
unlist(strsplit(gsub("<", "", str), ">"))
## [1] "a" "b" "c"
2)scan / chartr用空格替換<
和>
字符,然后使用scan來讀取剩下的內容。 此解決方案不使用任何包,特別簡單,但取決於不包含空格的字段:
scan(textConnection(chartr("<>", " ", str)), what = "", quiet = TRUE)
## [1] "a" "b" "c"
3)gsubfn strapplyc
中的strapplyc strapplyc提取與正則表達式匹配的字段。 (stringr包也提供了類似的功能,而base R提供了regmatches
,這也可以做到這一點,但有點笨拙。)這個解決方案很短但確實使用了一個包。
library(gsubfn)
strapplyc(str, "[^<>]+", simplify = c)
[1] "a" "b" "c"
首先, gsub
'> <'用於其他方面。 我選擇了一個空間。 這是你稍后會strsplit
。 然后,刪除'>'和'<'。 然后你可以在空間上進行strsplit
。 如果需要,請使用unlist
。
str1 <- '<a><b><c>';
str1 <-gsub('><',' ',str1)
str1 <-gsub('>|<','',str1)
strsplit(str1,' ')
#"a" "b" "c"
可以拆分使用strsplit
和一個正則表達式/[<>]+/
,然后過濾掉所有與該空結果lapply
:
str <- '<ab><bc><cd>'
unlist(lapply(strsplit(str,"[<>]+"), function(x){x[!x ==""]}))
//[1] "ab" "bc" "cd"
或者只是刪除第一個空arg:
unlist(strsplit(str,"[<>]+"))[-1]
//[1] "ab" "bc" "cd"
我們可以使用str_extract_all
library(stringr)
str_extract_all(str2, '[a-z]+')[[1]]
#[1] "ab" "bc" "cd"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.