我需要获得角色的非数字部分。我在R中的这个正则表达式有问题(根据regexpal应该有效):
grep("[\\D]+", "PC 17610", value = TRUE, perl = F)
返回"PC "
character(0)
其他测试用例:
grep("[\\D]+", "STON/O2. 3101282 ", value = TRUE, perl = F)
# should return "STON/O2."
grep("[\\D]+", "S.C./A.4. 23567", value = TRUE, perl = F)
# should return "S.C./A.4."
grep("[\\D]+", "C.A. 31026", value = TRUE, perl = F)
# should return "C.A."
更新:
工作是将列"Ticket"
(来自泰坦尼克号灾难数据库)划分为"TicketNumber"
和"TicketSeries"
列。至于现在,Ticket低于例如值:"A/5 21171", "PC 17599", "STON/O2. 3101282", "113803"
。因此,故障单编号列用于第一个记录21171
和故障单系列列"A/5"
,依此类推,用于下一个记录。
对于记录"113803"
,TicketNumber应为"113803"
和TicketSeries NA
。
帮助表示感谢, 谢谢!
答案 0 :(得分:3)
使用sub
代替,使用\S
正则表达式令牌匹配任何非空白字符。
x <- c('PC 17610', 'STON/O2. 3101282 ', 'S.C./A.4. 23567', 'C.A. 31026')
sub('(\\S+).*', '\\1', x)
# [1] "PC" "STON/O2." "S.C./A.4." "C.A."
否则,如果你想为无效或空匹配返回NA,我想你可以......
x <- c('PC 17610', 'STON/O2. 3101282 ', 'S.C./A.4. 23567', 'C.A. 31026', '31026')
r <- regmatches(x, gregexpr('^\\S+(?=\\s+)', x, perl=T))
unlist({r[sapply(r, length)==0] <- NA; r})
# [1] "PC" "STON/O2." "S.C./A.4." "C.A." NA
答案 1 :(得分:1)
您可以使用str_extract
library(stringr)
str_extract(x, '\\S+(?=\\s+)')
#[1] "PC" "STON/O2." "S.C./A.4." "C.A." NA
x <- c('PC 17610', 'STON/O2. 3101282 ', 'S.C./A.4. 23567',
'C.A. 31026', '31026')