[英]Extract part of string between two different patterns
我嘗試使用stringr
包來提取兩個特定模式之間的字符串的一部分。
例如,我有:
my.string <- "nanaqwertybaba"
left.border <- "nana"
right.border <- "baba"
並通過使用str_extract(string, pattern)
函數(其中模式由 POSIX 正則表達式定義),我想收到:
"qwerty"
來自 Google 的解決方案不起作用。
在base
R你可以使用gsub
。 pattern
的括號創建編號的捕獲組。 在這里,我們選擇replacement
的第二組,即邊界之間的組。 的.
匹配任何角色。 *
表示前面的元素中有零個或多個
gsub(pattern = "(.*nana)(.*)(baba.*)",
replacement = "\\2",
x = "xxxnanaRisnicebabayyy")
# "Risnice"
我不知道是否以及如何使用stringr提供的函數,但您也可以使用base regexpr
和substring
:
pattern <- paste0("(?<=", left.border, ")[a-z]+(?=", right.border, ")")
# "(?<=nana)[a-z]+(?=baba)"
rx <- regexpr(pattern, text=my.string, perl=TRUE)
# [1] 5
# attr(,"match.length")
# [1] 6
substring(my.string, rx, rx+attr(rx, "match.length")-1)
# [1] "qwerty"
我會使用str_match
“從第一匹配)通過(形成str_match提取捕獲基團,它返回與用於完全匹配的一列和各組一列的字符矩陣。”:從stringr REF
str_match(my.string, paste(left.border, '(.+)', right.border, sep=''))[,2]
上面的代碼創建了一個正則表達式,其中paste
連接捕獲組(.+)
,捕獲一個或多個字符,左右邊框(字符串之間沒有空格)。
假設單個匹配。 因此, [,2]
從str_match
返回的矩陣中選擇第二列。
您可以使用包unglue :
library(unglue)
my.string <- "nanaqwertybaba"
unglue_vec(my.string, "nana{res}baba")
#> [1] "qwerty"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.