首页 > 解决方案 > 提取一个子字符串,其中它旁边的字符使用 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像下面这样使用。它仅适用于s1s3。不为s2s4

str_replace(s1, 'color:\\s(.*)Size:\\s.*', '\\1')

有谁知道我如何从适用于所有 4 种情况的字符串中提取颜色?

标签: rregexstringr

解决方案


这是我使用 的尝试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"

推荐阅读