[英]Error trapping with regex
我有以下数据框
ColumnA=c("Kuala Lumpur Sector 2 new","old Jakarta Sector31", "Sector 9, 7 Hong Kong","Jakarta new Sector22")
并将部门编号提取到单独的列中
gsub(".*Sector ?([0-9]+).*","\\1",ColumnA)
如果'Sector'不在一行上,是否存在比if else语句更优雅的捕获错误的方法?
如果单词“ Sector”没有出现在一行上,我只想将该行的值设置为空白。
我考虑过先使用str_detect来查看“ Sector”是否为TRUE / FALSE,但这是一个非常丑陋的解决方案。
谢谢你的帮助。
如果单词“ Sector”没有出现在一行上,我只想将该行的值设置为空白。
为此,请使用交替运算符|
:
ColumnA=c("Kuala Lumpur 2 new","old Jakarta Sector31", "Sector 9, 7 Hong Kong","Jakarta new Sector22")
gsub("^(?:.*Sector ?([0-9]+).*|.*)$","\\1",ColumnA)
结果: [1] "" "31" "9" "22"
(由于Kuala Lumpur 2 new
没有Sector
,第二部分没有捕获组匹配整个字符串)。
library(stringr)
as.vector(sapply(str_extract(ColumnA, "(?<=Sector\\s{0,10})([0-9]+)"),function(x) replace(x,is.na(x),'')))
我认为这就是您所需要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.