[英]Need Help Improving Regular Expression Code in R
我正在處理地址數據並使用正則表達式來檢測錯誤。 雖然我的方法有效,但離高效還很遠。
首先,讓我們創建一個數據集。
try_detection <- data.frame(address = c('444+MLK+Street',
'444+3rd+Avenue',
'5th+MLK+Avenue',
'55th+MLK+Avenue',
'555th+MLK+Avenue',
'5555th+MLK+Avenue',
'55555th+MLK+Avenue'),
stringsAsFactors = FALSE)
只有前 2 個觀察結果是正確的,因為它以地址編號開頭。 目標是將前 2 個觀察標記為 FALSE,其余為 TRUE。
我可以看到不正確的模式是數字后跟字母。 所以,這就是我嘗試過的。
方法一
try_detection$summary <- str_detect(try_detection$address, '^[:digit:]{1}[:alpha:]')
結果是只有第 3 個觀察被標記。 所以,我只是想我可以簡單地使用“|” 並替換 {} 中的數字。
方法二
try_detection$summary <- str_detect(try_detection$address,
'^[:digit:]{1}[:alpha:] |
^[:digit:]{2}[:alpha:] |
^[:digit:]{3}[:alpha:] |
^[:digit:]{4}[:alpha:] |
^[:digit:]{5}[:alpha:]')
但所有觀察結果都被標記為 FALSE。
方法三
所以,這就是我最終使用的。
try_detection$detect1 <- str_detect(try_detection$address, '^[:digit:]{1}[:alpha:]')
try_detection$detect2 <- str_detect(try_detection$address, '^[:digit:]{2}[:alpha:]')
try_detection$detect3 <- str_detect(try_detection$address, '^[:digit:]{3}[:alpha:]']
try_detection$detect4 <- str_detect(try_detection$address, '^[:digit:]{4}[:alpha:]')
try_detection$detect5 <- str_detect(try_detection$address, '^[:digit:]{5}[:alpha:]')
try_detection <- try_detection %>% mutate(summary =
ifelse(detect1 == TRUE |
detect2 == TRUE |
detect3 == TRUE |
detect4 == TRUE |
detect5 == TRUE, "Y", "N"))
盡管它可以工作並且可以更正標志不正確的地址,但它根本沒有效率。 請建議我如何更有效地完成工作。
您可以使用
^[[:digit:]]+[[:alpha:]]
或者
^[0-9]+[[:alpha:]]
請參閱正則表達式演示。
細節
^
- 字符串的開始[[:digit:]]+
/ [0-9]+
- 1 個或更多( +
量詞匹配一個或多個出現)數字[[:alpha:]]
- 一個字母。 注意:如果您打算只匹配開頭有 1 到 5 位數字后跟一個字母的字符串,您可以將+
替換為{1,5}
限制(或range , interval )量詞。
盡管 ICU 正則表達式允許使用裸 POSIX 字符類(如[:digit:]
),我建議在括號表達式中使用它們以使它們更易於移植(即[[:digit:]]
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.