我有一堆文本文档,在某些情况下,单词的连接方式有时会像这样:“ ThreeWordsTogether”
我反而希望它们看起来像:“三个词在一起”
我试图以这种方式使用gsub函数生成所需的字符串:
gsub("[a-z][A-Z][a-z]", "[a-z] [A-Z][a-z]", "ThreeWordsTogether")
相当可预测地返回:“ Thre [a-z] [A-Z] [a-z] rd [a-z] [A-Z] [a-z] gether”
我在gsub文档中没有看到任何建议可以保留由正则表达式“ [a-z] [A-Z] [a-z]”捕获的字符的
在R中是否有这样做的方法,或者这是正则表达式匹配的局限性之一吗? (我对此很陌生)
答案 0 :(得分:3)
一种实现方法是使用f()
软件包:
snakecase
答案 1 :(得分:3)
您需要使用捕获组,捕获组由<custom-component [type]="myType" (myEvent)="onMyEvent()" *ngIf="enabled" [ngSwitch]="condition"></custom-component>
定义并由()
和\1
引用,以它们出现在模式中的顺序进行(您必须先进行转义,实际上是两个\2
)。我使用\
,但是您也可以使用stringr
来做到这一点。这基本上是说找到一个小写字母后跟一个大写字母,然后以空格之间的空格返回它们。请注意,这将适用于任意数量的单词,而不会保留现有单词,但无论出于何种原因,都不适用于中间出现大写字母的任何单词。您将不得不不断调整以适应您的情况-例如,如果单词以不是小写字母的字符结尾,那么现在不会拆分。
gsub
由reprex package(v0.2.0)于2018-07-17创建。
答案 2 :(得分:0)
这是对有关蛇形盒解决方案的问题的评论。 (我认为将其作为一个单独的答案更容易理解。)因此,为了使用snakecase-pkg抑制“ That's”中“ s”的大写转换并回答原始问题,主要有两个选择。
两者都需要将sep_in
设置为sth。与默认值("[^[:alnum:]]"
)不同,例如sep_in = NULL
,不要将'
用作输入分隔符(并因此将其替换为“ _”)。
然后,第一个选项使用parsing_option = -1
。在parsing_option
上加上减号通常会抑制在蛇格pkg中非字母数字字符后触发大小写转换。
strings <- c("TwoWords", "ThreeWordsTogether", "Three Words Apart",
"FourWordsTogetherHere", "MiDdleCaps", "That's")
snakecase::to_upper_camel_case(
strings, sep_in = NULL, parsing_option = -1, sep_out = " "
)
#> [1] "Two Words" "Three Words Together"
#> [3] "Three Words Apart" "Four Words Together Here"
#> [5] "Mi Ddle Caps" "That's"
另一个选项使用snakecase::to_title_case()
,它内部将snakecase::to_sentence_case()
中的某些部分与tools::toTitleCase()
组合在一起(即,在tools::toTitleCase()
之前,“ That's”首先转换为“ that's”应用,'
周围的空格将被删除。)
snakecase::to_title_case(strings, sep_in = NULL)
#> [1] "Two Words" "Three Words Together"
#> [3] "Three Words Apart" "Four Words Together Here"
#> [5] "Mi Ddle Caps" "That's"
由reprex package(v0.3.0)于2019-08-01创建