【问题标题】:check if a character within a string is uppercase检查字符串中的字符是否为大写
【发布时间】:2017-12-24 10:14:03
【问题描述】:

我有一个字符串

x <- "lowerUpper"

并且想要确定这个字符串中的哪个字符是大写字母。

我可以使用toupper(x) == x,它告诉我是否所有字符都是大写的,但我如何检查是否只有一些(以及哪些)是?

【问题讨论】:

    标签: r uppercase


    【解决方案1】:

    一个选项是gregexpr 查找字符为大写的位置

    unlist(gregexpr("[A-Z]", x))
    #[1] 6
    

    【讨论】:

    • 完美!谢谢!
    【解决方案2】:

    您也可以使用符号\U 来检查是否为大写:

    unlist(gregexpr("\\U", "lowerUpper"))
    #[1] 6
    

    【讨论】:

      【解决方案3】:
      > x <- "lowerUpper"
      > sapply(strsplit(x, ''), function(a) which(a %in% LETTERS)[1])
      [1] 6
      

      或

      > library(stringi)
      > stri_locate_first_regex(x, "[A-Z]")
      

      【讨论】:

        【解决方案4】:

        另一种选择是检查每个字母:

        which(toupper(strsplit(x,split = "")[[1]])==strsplit(x,split = "")[[1]])
        #[1] 6
        

        【讨论】:

          【解决方案5】:

          也许是使用 %in% 的更简洁的代码版本

          unlist(strsplit("lowerUpper",'')) %in% LETTERS
          

          这里的一个优点是返回指示字符串中每个字母位置的逻辑向量。此解决方案也适用于多个大写字母,而 grep 选项仅返回第一个匹配项。最后,在我看来,使用 LETTERS 可以使代码更具可读性。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-03-26
            • 2014-08-13
            • 2018-06-13
            • 1970-01-01
            • 1970-01-01
            • 2017-03-10
            • 2016-11-11
            • 1970-01-01
            相关资源
            最近更新 更多