我有一系列看起来像这样的字符值。 我希望它们看起来像这样。
然而,我有一组词,当完全匹配时,它们应该保持原样。在此列表中将包含 ABC 之类的内容。
对于输入
六六十个测试对象
不包括“六”
所需的输出将是“六个六十测试对象”。
我目前的代码是这样的:
x <- gsub(paste0("(", paste(exclusions, collapse = "|"), "|\\w)(\\w*)"), "\\U\\1\\L\\2", x, perl = T)
最佳答案
这是一种方法:
x <- "SIX SIXTY TEST SUBJECT"
output <- gsub("(?<=.)\\b(\\S)(\\S*)", "\\U\\1\\L\\2", x, perl=TRUE)
output
[1] "SIX Sixty Test Subject"
这里是对所用正则表达式的解释:
(?<=.) assert that some text precedes (ignore the first uppercase word)
\\b word boundary
(\\S) match and capture the first character
(\\S*) match and capture the remaining characters
然后我们用大写的第一个捕获字母替换,然后用小写的其余字符替换。请注意,正面前瞻 (?<=.)
将从替换中保留第一个单词。
编辑:
相反,如果您想保留 字面词 SIX
,然后使用这个版本:
x <- "SIX SIXTY TEST SUBJECT"
output <- gsub("\\b(?!SIX\\b)(\\S)(\\S*)\\b", "\\U\\1\\L\\2", x, perl=TRUE)
关于r - 转换为正确的大小写,除非它是 R 中的 TLA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65606569/