2015-10-18 67 views
2

src $回顧每一行都用俄文填充文本。我想在每一行中計算CAPSLOCK。例如,在「我的蘋果是綠色的」中,我不僅要計算大寫字母的數量,還要計算CAPSLOCK的數量(沒有「我的」,只有「綠色」)。所以,它只有在至少兩個字符以大寫字母呈現時才起作用。如何使用R來計算字符串中的CAPSLOCK

現在,我已經在我的腳本下面的代碼:

capscount <- str_count(src$Review, "[А-Я]") 

它只計算大寫字母的總量。我只需要CAPSLOCK中的字符總數,這意味着只有在顯示一個字中至少有2個後續字母(例如,「GREEN」中的「GR」)時纔會計算這些字符。

預先感謝您。

回答

4

您正在尋找的圖案是"\\b[A-Z]{2,}\\b"。它將連續匹配兩個或更多大寫字母,每邊有邊界\\b。這是整體結構,必要時用俄文字母填寫。

#test string. A correct count should be 1 0 2 
x <- c("My GREEN", "My Green", "MY GREEN") 

library(stringr) 
str_count(x, "\\b[A-Z]{2,}\\b") 
#[1] 1 0 2 

library(stringi) 
stri_count(x, regex="\\b[A-Z]{2,}\\b") 
#[1] 1 0 2 

#base R 
sapply(gregexpr("\\b[A-Z]{2,}\\b", x), function(x) length(c(x[x > 0]))) 
#[1] 1 0 2 

更新

如果你想字符計數:

sapply(str_match_all(x, "\\b[A-Z]{2,}\\b"), nchar) 
1

使用皮埃爾的正則表達式與ncharstr_extract_all。使用simplify = TRUEpaste0連接所有實例。

library(stringr) 

string <- c("My applie is GREEN and Her Majesty's apricot is ORANGE", "I have a LARGE sword", "My baby is sick") 

nchar(
    paste0(
    str_extract_all(string = string, pattern = "\\b[A-Z]{2,}\\b", simplify = TRUE), 
    collapse = "") 
) 
1

qdapRegex包我保持對這個正則表達式,這是一樣的@休的正則表達式,但IMO它的好,有很多存儲在我可以只搶到圖書館共同的正則表達式的。 qdapRegex使用stringi作爲後端,所以應該可以使用,如果你已經安裝qdapRegex

在@Pierre Lafortune的字符串:

x <- c("My GREEN", "My Green", "MY GREEN") 

library(qdapRegex) 
stringi::stri_count_regex(x, grab("@rm_caps")) 

## [1] 1 0 2 

讓我們來看看正則表達式:

grab("@rm_caps") 

## "(\\b[A-Z]{2,}\\b)" 

在@休的字符串:

x2 <- c("My applie is GREEN and Her Majesty's apricot is ORANGE", "I have a LARGE sword", "My baby is sick") 
stringi::stri_count_regex(x2, grab("@rm_caps")) 

## [1] 2 1 0 
相關問題