当前位置: 首页 > 知识库问答 >
问题:

(In R)如何按标题大小写将字符串中的单词拆分为“WeLiveInCA”,同时保留缩写?

艾善
2023-03-14

(在R中)如何在不拆分缩写的情况下按字符串中的标题大小写拆分单词,例如“WeLiveInCA”到“We Live In CA”?

我知道如何在每个大写字母处拆分字符串,但这样做会拆分首字母/缩写,例如CA、USSR,甚至美国,我需要保留它们。

因此,我在考虑类似的逻辑类型,如果字符串中的单词不是首字母,那么用空格分割单词,其中小写字符后面跟着大写字符

我下面的代码片段用大写字母拆分了带有空格的单词,但它打破了像CA这样的首字母缩写,变得不合时宜。

s <- "WeLiveInCA"
trimws(gsub('([[:upper:]])', ' \\1', s))
# "We Live In C A"

或者另一个例子...

s <- c("IDon'tEatKittensFYI", "YouKnowYourABCs")
trimws(gsub('([[:upper:]])', ' \\1', s))
# "I Don't Eat Kittens F Y I" "You Know Your A B Cs"

我想要的结果是:

"We Live In CA"
#
"I Don't Eat Kittens FYI" "You Know Your ABCs"

但这需要广泛适用(不仅仅是我的例子)

共有1个答案

秦楚
2023-03-14

尝试使用基本Rgregexpr/regmatches

s <- c("WeLiveInCA", "IDon'tEatKittensFYI", "YouKnowYourABCs")
regmatches(s, gregexpr('[[:upper:]]+[^[:upper:]]*', s))
#[[1]]
#[1] "We"   "Live" "In"   "CA"  
#
#[[2]]
#[1] "IDon't"  "Eat"     "Kittens" "FYI"    
#
#[[3]]
#[1] "You"  "Know" "Your" "ABCs"

解释。

  1. [[:大写:]] 匹配一个或多个大写字母;
  2. [^[:上写:]]* 匹配除大写字母以外的任何内容的零个或多个匹配。
  3. 按顺序,这两个正则表达式匹配以大写字母开头的单词,后跟其他字母。
 类似资料:
  • 使用javascript,我想将任意长度的字符串拆分为最多80个字符的段。需要注意的是,我不想拆分单词。例如,我目前正在使用下面列出的方法在JavaScript中将大字符串拆分为n大小的块 问题是,一个从第76个字符开始到第84个字符结束的单词将被分成两半。是否有一个光滑的正则表达式或代码来防止这种情况? 为了澄清这一点,我能够编写一个小函数来实现这一点,我只是想知道是否有一种干净、简洁的方法。

  • 问题内容: 如何在保持单词边界的同时将字符串分成最大字符长度的相等部分? 例如,如果我想将字符串“ hello world”分割为最多7个字符的相等子字符串,则应该返回我 和 但是我当前的实现返回 和 我正在使用以下从Java中的Splitstring拆分为等长子字符串的代码,将输入字符串拆分为相等的部分 将字符串拆分为子字符串时,是否可以保持单词边界? 更具体地说,我需要字符串拆分算法来考虑空格

  • 问题内容: 将字符串中的单词大写的最佳方法是什么? 问题答案: 修复了Marco Demaio的解决方案,即第一个字母前面没有空格大写。 可以处理国家符号和带重音的字母。 可以处理引号和花括号。

  • 以句子大小写返回当前文本的字符串表示形式。句格是在句子中使用大写字母或只大写第一个词和任何专有名词的常规方式。此外,所有大写字都应保持原样。 对于这份作业,名词仅限于开头有一个大写字母的单词。

  • 问题内容: 我将如何能够采取像一个字符串 ,并将其分成4个长度元组像(,,) 问题答案: 用途:

  • 问题内容: 有没有办法在不知道字符串长度的情况下,将一个字符长的字符串切成4个字符串,每个字符长? 例如: 问题答案: