簡體   English   中英

用大寫替換捕獲的非 ASCII 字母

[英]Substitute captured non-ascii letter with upper case

是否可以僅使用正則表達式和僅基本 R(僅使用 g*sub() 函數)進行復制,以下...

sub("(i)", "\\U\\1", "string", perl = TRUE)
# [1] "strIng"

對於非ASCII字母?

# Hoped for output
sub("(í)", "?", "stríng", perl = TRUE)
# [1] "strÍng"

PS。 R 正則表達式風格是 TRE 和 PCRE。

PS2。 我正在使用 R 4.2.1 和Sys.getlocale()給出:

[1] "LC_COLLATE=Icelandic_Iceland.utf8;LC_CTYPE=Icelandic_Iceland.utf8;LC_MONETARY=Icelandic_Iceland.utf8;LC_NUMERIC=C;LC_TIME=Icelandic_Iceland.utf8"

對於僅使用基本 R 的稍微復雜/明確的解決方案:

sub_nascii <- function(pattern, string) {
  matches <- gregexpr(pattern, string)[[1]]
  
  for (i in matches) {
    substr(string, i, i) <- toupper(substr(string, i, i))
  }
  string
}

sub_nascii(pattern = "í", "stríng")

這適用於我的語言環境,而sub本身不起作用。

您可以使用

x="stríng"
gr <- gregexpr("í", x)
mat <- regmatches(x, gr)
regmatches(x, gr) <- lapply(mat, toupper)
# > x
# > [1] "strÍng"

在線查看 R 演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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