[英]extract a substring where the characters next to it varies using regex in r
我有一些像下面這樣的字符串。 我需要從字符串中提取顏色部分。
s1= 'color: red greenSize: 2 CountVerified Purchase'
s2= 'color: red greenVerified Purchase'
s3= 'color: red greenSize: 2 Count'
s4= 'color: red green'
我使用了如下的str_replace
。 它僅適用於s1
和s3
。 不適用於s2
和s4
。
str_replace(s1, 'color:\\s(.*)Size:\\s.*', '\\1')
有誰知道我該如何從適用於所有4種情況的字符串中提取顏色?
這是我嘗試使用regmatches
以及以下regex模式:
color: (\\S+) (\\S+)(?=Size|Verified|$)
這將隔離第一和第二種顏色,第二種顏色的結尾由字符串末尾的單詞Size
或Verified
給出。
x <- c("color: red greenSize: 2 CountVerified Purchase",
"color: red greenVerified Purchase",
"color: red greenSize: 2 Count",
"color: red green")
sapply(x, function(x) {
result <- regmatches(x, regexec("color: (\\S+) (\\S+)(?=Size|Verified|$)", x, perl=TRUE))[[1]]
c(result[2], result[3])
})
輸出(有點混亂):
color: red greenSize: 2 CountVerified Purchase
[1,] "red"
[2,] "green"
color: red greenVerified Purchase color: red greenSize: 2 Count
[1,] "red" "red"
[2,] "green" "green"
color: red green
[1,] "red"
[2,] "green"
只是我還是所有這些顏色都是小寫的? 如果碰巧是這種情況,則可以執行以下操作:
pattern <- "color:\\s*([a-z ]+).*"
gsub(pattern, "\\1", your_strings_here)
參見regex101.com上的演示 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.