正则表达式 – R中的正则表达式,具有负的lookbehind

前端之家收集整理的这篇文章主要介绍了正则表达式 – R中的正则表达式,具有负的lookbehind前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我有以下数据,我们来说叫做“my_data”:
Storm.Type
TYPHOON
SEVERE STORM
TROPICAL STORM
SNOWSTORM AND HIGH WINDS

我想要的是分类my_data $Storm.Type中的每个元素是否是风暴,但是我不想将热带风暴包括在风暴中(我将分别对其进行分类),这样我就可以

Storm.Type                    Is.Storm
TYPHOON                       0
SEVERE STORM                  1
TROPICAL STORM                0
SNOWSTORM AND HIGH WINDS      1

我写了以下代码

my_data$Is.Storm  <-  my_data[grep("(?<!TROPICAL) (?i)STORM"),"Storm.Type"]

但这只会将“严重的风险”作为暴风雨返回(但是忽略了雪域和高风险).谢谢!

问题是您正在寻找具有前面空格的字符串“STORM”,因此“SNOWSTORM”不符合条件.

作为一个修复,考虑将空间移动到你的负面的lookbehind断言,像这样:

ss <- c("TYPHOON","SEVERE STORM","TROPICAL STORM","SNOWSTORM AND HIGH WINDS","THUNDERSTORM")
grep("(?<!TROPICAL )(?i)STORM",ss,perl = TRUE)
# [1] 2 4 5
grepl("(?<!TROPICAL )(?i)STORM",perl = TRUE)
# [1] FALSE  TRUE FALSE  TRUE  TRUE

我不知道(?i)和(?-i)设置是否在正则表达式中忽略大小写.酷找.另一种方法是ignore.case标志:

grepl("(?<!tropical )storm",perl = TRUE,ignore.case = TRUE)
# [1] FALSE  TRUE FALSE  TRUE  TRUE

然后定义您的列:

my_data$Is.Storm  <-  grepl("(?<!tropical )storm",my_data$Storm.Type,ignore.case = TRUE)

猜你在找的正则表达式相关文章