我有一系列字串,例如“任命 XX 為負責人”、“任命 YY 為負責人”(包含在標記為“標題”的列中標記為“df”的資料框中)
我想提取包含在兩個不同運算式之間的名稱 XX、XY。
我目前正在使用以下內容:
df$name <- df$title %>%
str_extract(regex(pattern = "(?<=Appointment of).*(?= as)", ignore_case=TRUE))
但是,這僅適用于兩種可能的模式之一。
df$name <- df$title %>%
str_extract(regex(pattern = "(?<=Appointment of).*(?= as)"|"(?<=joins).*(?= as)", ignore_case=TRUE))
這當然不起作用。如何創建多個模式以輸入 str_extract?
如果需要,很樂意提供更多詳細資訊!
非常感謝
uj5u.com熱心網友回復:
Straply 可以在不使用零寬度結構的情況下做到這一點。僅回傳第二個捕獲組。
library(gsubfn)
x <- c("the appointment of XX as head", "appoints YY as head") # input
strapply(x, "(appointment of|appoints) (.*?) as head", ~ ..2, simplify = TRUE)
## [1] "XX" "YY"
或使用 (?:...) 指定第一個括號部分不是捕獲組:
strapply(x, "(?:appointment of|appoints) (.*?) as head", simplify = TRUE)
## [1] "XX" "YY"
基礎R
在基礎 R 中,如果 x 的每個組件都匹配,則可以使用 sub 完成
sub(".*(appointment of|appoints) (.*?) as head.*", "\\2", x)
## [1] "XX" "YY"
或者 strcapture 如果沒有
proto <- data.frame(dummy = character(0), value = character(0))
strcapture("(appointment of|appoints) (.*?) as head", x, proto)[, 2]
## [1] "XX" "YY"
uj5u.com熱心網友回復:
您可以使用
df$name <- df$title %>%
str_extract(regex(pattern = "(?<=\\bAppointment of\\s|\\bjoins\\s).*?(?=\\s as\\b)", ignore_case=TRUE))
詳情:
(?<=- 積極回顧的開始\bAppointment of\s- 一個單詞邊界 (\b),Appointment of,然后是一個空格字符 (\s)
|- 或者\bjoins\s- 一個完整的單詞joins和一個空格
)- 回顧結束.*?- 除換行符以外的任何零個或多個字符(?=\s as\b)- 正向前瞻,需要一個或多個空格,as以及緊鄰當前位置右側的單詞邊界。
請注意,在stringr,后視模式不是嚴格固定寬度的,您可以使用
"(?<=\\bAppointment of\\s{1,100}|\\bjoins\\s{1,100}).*?(?=\\s as\\b)"
where\s{1,100}可以匹配一到一百個空格字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/389376.html
下一篇:整列上的Scala正則運算式
