我想檢查文本中是否有 a)連續三個輔音或 b)連續四個相同的字母。有人可以幫我處理正則運算式嗎?
library(tidyverse)
df <- data.frame(text = c("Completely valid", "abcdefg", "blablabla", "flahaaaa", "asdf", "another text", "a last one", "sj", "ngbas"))
consonants <- c("q", "w", "r", "t", "z", "p", "s", "d", "f", "g", "h", "k", "l", "m", "n", "b", "x")
df %>% mutate(
invalid = FALSE,
# Length too short
invalid = ifelse(nchar(text)<3, TRUE, invalid),
# Contains three consonants in a row: e.g. "ngbas"
invalid = ifelse(str_detect(text,"???"), TRUE, FALSE), # <--- Regex missing
# More than 3 identical characters in a row: e.g. "flahaaaa"
invalid = ifelse(str_detect(text,"???"), TRUE, FALSE) # <--- Regex missing
)
uj5u.com熱心網友回復:
連續三個輔音:
[qwrtzpsdfghklmnbx]{3}
特定字符的長度 > 3 的序列:
([a-z])(\\1){3}
# The double backslash occurs due to its role as the escape character in strings.
后者使用反向參考。該數字表示分配給所參考的捕獲組的序號(= 括號中的運算式) - 在這種情況下是拉丁小寫字母的字符類。
為清楚起見,這里不考慮字符大小寫。
如果沒有反向參考,解決方案會有點冗長:
(aaaa|bbbb|cccc|dddd|eeee|ffff|gggg|hhhh|iiii|jjjj|kkkk|llll|mmmm|nnnn|oooo|pppp|qqqq|rrrr|ssss|tttt|uuuu|vvvv|wwww|xxxx|yyyy|zzzz)
相關檔案可以在這里找到。
uj5u.com熱心網友回復:
您不需要檢查單詞的長度,正則運算式會為您制作。
在您的代碼中,您有一個錯誤,最后一個 ifelse 條件將重寫之前的任何輸出,例如,如果第二個 ifelse 為真,第三個為假,則輸出將為假,您正在制作 AND 條件。
我糾正你的錯誤。
這是完整的代碼:
df %>% mutate(
invalid = FALSE,
# Contains three consonants in a row: e.g. "ngbas"
invalid = ifelse(str_detect(text,regex("[BCDFGHJKLMNPQRSTVWXYZ]{3}", ignore_case = TRUE)), TRUE, invalid), # <--- Regex missing
# More than 3 identical characters in a row: e.g. "flahaaaa"
invalid = ifelse(str_detect(text,regex("([a-zA-Z])\\1{3}", ignore_case = TRUE)), TRUE, invalid) # <--- Regex missing
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/468604.html
上一篇:如何決議從QR掃描儀發送的資料
下一篇:Nginx正則運算式位置不匹配
