簡體   English   中英

gsub中的正則表達式問題

[英]Regex issue in gsub

我已經定義

vec <- "5f 110y, Fast"

gsub("[\\s0-9a-z]+,", "", vec)

給出“ 5f Fast

我希望它會給出“ Fast ”,因為逗號前的所有內容都應由正則表達式匹配。

誰能向我解釋為什么不是這種情況?

您應該記住,在TRE regex模式中,不能使用\\s\\d\\w等正則表達式轉義符。

因此,您所用的正則表達式"[\\\\s0-9a-z]+,"匹配1個或多個\\s ,數字和小寫ASCII字母,然后匹配單個,

您可以改用POSIX字符類,例如[:space:] (任何空白)或[:blank:] (水平空白):

> gsub("[[:space:]0-9a-z]+,", "", vec)
[1] " Fast"

或者,使用帶有\\sperl=TRUE參數的PCRE正則表達式:

> gsub("[\\s0-9a-z]+,", "", vec, perl=TRUE)
[1] " Fast"

要使\\s與所有Unicode空格匹配,請在模式開頭添加(*UCP) PCRE動詞: gsub("(*UCP)[\\\\s0-9a-z]+,", "", vec, perl=TRUE)

您可以嘗試跟進,並讓我知道是否對您有幫助。

vec <- c("5f 110y, Fast")
gsub(".*,","",vec)

要么

gsub("[[:alnum:]]+ [[:alnum:]]+,","",vec)

tidyverse解決方案是將str_replace與原始正則表達式一起使用:

library(stringr)

str_replace(vec, "[\\s0-9a-z]+,", "")

嘗試其他正則表達式:

gsub("[[:blank:][:digit:][:lower:]]+,", "", vec)
#[1] " Fast"

或者,要刪除逗號后的空格,

gsub("[[:blank:][:digit:][:lower:]]+, ", "", vec)
#[1] "Fast"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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