regex - 使用 gsub 和 regex 提取特定单词

标签 regex r gsub

跨越上一个问题,我在使用正确的 reg 表达式语法来隔离特定单词时遇到了问题。

给定一个数据框:

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

最佳答案

这个怎么样?

unlist(regmatches(rownames(DF), gregexpr("dark|light", rownames(DF), ignore.case=TRUE)))
# [1] "Dark"  "Light" "dark"  "dark"  "light" "Light" "dark"  "Light"

或者
gsub(".*(dark|light).*$", "\\1", row.names(DF), ignore.case = TRUE)
# [1] "Dark"  "Light" "dark"  "dark"  "light" "Light" "dark"  "Light"

关于regex - 使用 gsub 和 regex 提取特定单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17913571/

相关文章:

Java 正则表达式 : Match string contains any of two texts among many

r - 仅在图形的一个区域上更改背景颜色

java - 为什么正则表达式组不起作用

r - 将输入值保存在 csv 文件中,在每次提交时添加一行, Shiny

r - 如何使用拆分制作不同的数据框

ruby - 如果需要,如何使用 gsub 添加尾部斜线

使用查找另一个数据帧替换一个数据帧中的文本

Ruby Regex gsub - 字符串之后的所有内容

ruby-on-rails - 如何在 Ruby/Rails 中匹配和替换模板标签?

javascript - JavaScript 中雅虎电子邮件 ID 验证的正则表达式