我有一些类似下面的字符串。我需要从字符串中提取颜色部分。
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种情况的字符串中提取颜色吗?
答案 0 :(得分:2)
这些表达式可能有效:
color:\s(.*?)(Size.*|[A-Z].*|$)
color:\s(.*?)([A-Z].*|$)
我们的代码可能看起来像
str_replace(s1, 'color:\\s(.*?)([A-Z].*|$)', '\\1')
jex.im可视化正则表达式:
答案 1 :(得分:2)
这是我尝试使用regmatches
以及以下正则表达式模式:
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"
答案 2 :(得分:1)
是我还是所有这些颜色都是小写的?如果碰巧是这种情况,您可以执行以下操作:
pattern <- "color:\\s*([a-z ]+).*"
gsub(pattern, "\\1", your_strings_here)