从之前的问题中跳出来,我遇到了一个问题,即如何使用正确的正则表达式语法来隔离特定的单词。
给定一个数据框:
DL<-c("Dark_ark","Light-Lis","dark7","DK_dark","The_light","Lights","Lig_dark","D_Light")
Col1<-c(1,12,3,6,4,8,2,8)
DF<-data.frame(Col1)
row.names(DF)<-DL
我希望提取行名称中的所有“Dark” 和 “Light”(忽略大小写),并创建第二列仅包含字符串“Dark”或“Light”。
Col2<-c("Dark","Light","dark","dark","light","Light","dark","Light")
DF$Col2<-Col2
Col1 Col2
Dark_ark 1 Dark
Light-Lis 12 Light
dark7 3 dark
DK_dark 6 dark
The_light 4 light
Lights 8 Light
Lig_dark 2 dark
D_Light 8 Light
我稍微修改了原始数据以详细说明我的当前问题。在Tyler Rinker给出的优秀答案的启发下,我使用了以下代码:
DF$Col2<-gsub("[^dark|light]", "", row.names(DF), ignore.case = TRUE)
但是gsub对一些常用字母有误判。在论坛上搜索使用正则表达式隔离确切单词的答案时,似乎应该使用双斜杠和
\\<light\\>
或者
\\blight\\b
所以,为什么会出现这条线呢?
DF$Col2<-gsub("[^\\<dark\\>|\\<light\\>]", "", row.names(DF), ignore.case = TRUE)
没有获取所需的列吗?而是我得到了
Col1 Col2
Dark_ark 1 Darkark
Light-Lis 12 LightLi
dark7 3 dark
DK_dark 6 DKdark
The_light 4 Thlight
Lights 8 Light
Lig_dark 2 Ligdark
D_Light 8 DLight
\\b
用于定义单词边界。因此,您必须告诉它确切的字符串在哪里。据我所知,您不能否定它。其次,它使用空格和标点符号来查找边界..._
不是其中之一。 - Arun