簡體   English   中英

使用正則表達式捕獲錯誤

[英]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 ,第二部分沒有捕獲組匹配整個字符串)。

IDEONE演示

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM