在 R 正则表达式中使用 shorthand 字符 类 内部字符 类
Using shorthand character classes inside character classes in R regex
我已经定义了
vec <- "5f 110y, Fast"
和
gsub("[\s0-9a-z]+,", "", vec)
给出“5f Fast
”
我原以为它会给出“Fast
”,因为逗号之前的所有内容都应该与正则表达式匹配。
任何人都可以向我解释为什么不是这样吗?
您应该记住,在 TRE 正则表达式模式中,您不能在括号表达式中使用正则表达式转义,例如 \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)
尝试不同的正则表达式:
gsub("[[:blank:][:digit:][:lower:]]+,", "", vec)
#[1] " Fast"
或者,要删除逗号后的 space,
gsub("[[:blank:][:digit:][:lower:]]+, ", "", vec)
#[1] "Fast"
一个 tidyverse
解决方案是使用 str_replace
和你原来的正则表达式:
library(stringr)
str_replace(vec, "[\s0-9a-z]+,", "")
我已经定义了
vec <- "5f 110y, Fast"
和
gsub("[\s0-9a-z]+,", "", vec)
给出“5f Fast
”
我原以为它会给出“Fast
”,因为逗号之前的所有内容都应该与正则表达式匹配。
任何人都可以向我解释为什么不是这样吗?
您应该记住,在 TRE 正则表达式模式中,您不能在括号表达式中使用正则表达式转义,例如 \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)
尝试不同的正则表达式:
gsub("[[:blank:][:digit:][:lower:]]+,", "", vec)
#[1] " Fast"
或者,要删除逗号后的 space,
gsub("[[:blank:][:digit:][:lower:]]+, ", "", vec)
#[1] "Fast"
一个 tidyverse
解决方案是使用 str_replace
和你原来的正则表达式:
library(stringr)
str_replace(vec, "[\s0-9a-z]+,", "")