[英]Extract a string between two words, with multiple patterns
我有一系列字符串,例如“任命 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?
如果需要,很高興提供更多詳細信息!
非常感謝
strapply 可以在不使用零寬度結構的情況下做到這一點。 僅返回第二個捕獲組。
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 中,如果 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"
您可以使用
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
中,lookbehind 模式不是嚴格固定寬度的,您可以使用
"(?<=\\bAppointment of\\s{1,100}|\\bjoins\\s{1,100}).*?(?=\\s+as\\b)"
其中\s{1,100}
可以匹配一到一百個空白字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.