R regex数据帧值中第^1行的开头

R regex数据帧值中第^1行的开头,regex,r,Regex,R,鉴于: 但不符合以下条件: grepl("[0-9]*Mbps$", test[,"Speed"], ignore.case=TRUE) ^(行/字符串开头)字符导致了问题,但原因是?因为正则表达式中缺少空格 “^[0-9]*Mbps$”或“^[0-9]*\\s*Mbps$”将与输入匹配 “[0-9]*Mbps$”匹配(不一定从字符串开头开始)“数字字符的出现次数为零,后跟“Mbps”和字符串结尾” “^[0-9]*Mbps$”与输入不匹配,因为它要求输入以零或多个数字开头,然后是“

鉴于:

但不符合以下条件:

    grepl("[0-9]*Mbps$", test[,"Speed"], ignore.case=TRUE)

^
(行/字符串开头)字符导致了问题,但原因是?

因为正则表达式中缺少空格

“^[0-9]*Mbps$”
“^[0-9]*\\s*Mbps$”
将与输入匹配


“[0-9]*Mbps$”
匹配(不一定从字符串开头开始)“数字字符的出现次数为零,后跟“Mbps”和字符串结尾”


“^[0-9]*Mbps$”
与输入不匹配,因为它要求输入以零或多个数字开头,然后是“Mbps”(无空格!),然后是字符串结尾

regex在开头查找一个数字,然后在结尾查找
Mbps
。因为中间有空格,所以没有匹配。要匹配字符串,请使用
^[0-9]*\\s*Mbps$

    grepl("^[0-9]*Mbps$", test[,"Speed"], ignore.case=TRUE)

[0-9]*Mbps$
只匹配每个项目末尾的
Mbps
,因为
[0-9]*
可以匹配一个空字符串,因为
*
量词。

第二个版本基本上是说,“Mbps”或“Mbps”或“Mbps”(如果有)之前只能有数字。查看扩展数据帧的结果,其中包含更多可能性:

[1] TRUE TRUE
>test grepl(“^[0-9]*Mbps$”,test[,“Speed”],ignore.case=TRUE)
[1] 假假真假假真
>grepl(“[0-9]*Mbps$”,test[,“Speed”],ignore.case=TRUE)
[1] 真的真的真的真的
这里的“诀窍”或“抓住”是
grepl([0-9]*Mbps$”,…)
实际上与
grepl(“Mbps$”,…)
没有什么不同。它将匹配一大堆你可能不想要的字符串

test <- data.frame(Speed=c("2 Mbps", "10 Mbps"))
grepl("^[0-9]*\\s*Mbps$", test[,"Speed"], ignore.case=TRUE)
[1] TRUE TRUE
> test <- data.frame(Speed=c("2 Mbps", "10 Mbps", "123Mbps", " Mbps", "aMbps", "Mbps"))
> grepl("^[0-9]*Mbps$", test[,"Speed"], ignore.case=TRUE)
[1] FALSE FALSE  TRUE FALSE FALSE  TRUE

> grepl("[0-9]*Mbps$", test[,"Speed"], ignore.case=TRUE)
[1] TRUE TRUE TRUE TRUE TRUE TRUE