[英]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"
或者,使用帶有\\s
和perl=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.