簡體   English   中英

使用r中的regex提取子字符串,其旁邊的字符會發生變化

[英]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 它僅適用於s1s3 不適用於s2s4

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

有誰知道我該如何從適用於所有4種情況的字符串中提取顏色?

這些表達式可能有效:

color:\s(.*?)(Size.*|[A-Z].*|$)
color:\s(.*?)([A-Z].*|$)

我們的代碼可能看起來像

str_replace(s1, 'color:\\s(.*?)([A-Z].*|$)', '\\1')

演示1

演示2

RegEx電路

jex.im可視化正則表達式:

在此處輸入圖片說明

這是我嘗試使用regmatches以及以下regex模式:

color: (\\S+) (\\S+)(?=Size|Verified|$)

這將隔離第一和第二種顏色,第二種顏色的結尾由字符串末尾的單詞SizeVerified給出。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM