簡體   English   中英

使用R中的RegEx拆分字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM