R 用于检测连续小写和大写的正则表达式

R 用于检测连续小写和大写的正则表达式,r,regex,R,Regex,我有类似于此的字符向量: test <- "ThisisAtest" 为此,我需要检测连续的小写和大写字符。我试着这样做(我使用了str\u remove而不是str\u replace,因为我还不知道第一种模式): 但它返回一个空字符向量。有人知道怎么做吗 我不知道gsub()或stringr::str.*函数使用的正则表达式之间是否有差异,但我更喜欢后者。我们可以在这里使用两个捕获组,一个带小写字母,另一个紧跟大写字母,并在两者之间加上分号 请注意,我已将字符串更

我有类似于此的字符向量:

test <- "ThisisAtest"
为此,我需要检测连续的小写和大写字符。我试着这样做(我使用了
str\u remove
而不是
str\u replace
,因为我还不知道第一种模式):

但它返回一个空字符向量。有人知道怎么做吗


我不知道
gsub()
stringr::str.*
函数使用的正则表达式之间是否有差异,但我更喜欢后者。

我们可以在这里使用两个捕获组,一个带小写字母,另一个紧跟大写字母,并在两者之间加上分号

请注意,我已将字符串更改为包含该模式的两个实例

test <- "ThisisAtestAnew"

gsub('([a-z])([A-Z])', '\\1;\\2', test)
[1] "Thisis;Atest;Anew"

您还可以使用gsub和正环行查找,在不使用锚定的情况下,找到小写字符和大写字符之间的位置

test <- "ThisisAtest"
gsub("(?<=[a-z])(?=[A-Z])", ";", test, perl=T)

另一个例子:字符后面跟大写字母,直到另一个大写字符,我们添加了一个“;”在两组之间

> test <- "ThisisAtest"
> gsub('([A-Z].*)([A-Z].*)','\\1;\\2',test)
[1] "Thisis;Atest"
> 
>测试gsub('([A-Z].*)([A-Z].*),\\1;\\2',测试)
[1] “这是我最喜欢的”
> 

还有一个完全支持Unicode的选项

stringr::str_replace_all(test, '(?<=\\p{Ll})(?=\\p{Lu})', ';')

stringr::str_replace_all(test),(?您可以使用
gsub((?use
stringr::str_replace_all(test),(\\p{Ll})(?=\\p{Lu}),\\1;)
来支持任何Unicode字符。
test <- "ThisisAtest"
gsub("(?<=[a-z])(?=[A-Z])", ";", test, perl=T)
[1] "Thisis;Atest"
> test <- "ThisisAtest"
> gsub('([A-Z].*)([A-Z].*)','\\1;\\2',test)
[1] "Thisis;Atest"
> 
stringr::str_replace_all(test, '(?<=\\p{Ll})(?=\\p{Lu})', ';')
--------------------------------------------------------------------------------
  (?<=                     look behind to see if there is:
--------------------------------------------------------------------------------
    \\p{Ll}                Lowercase Unicode letter
--------------------------------------------------------------------------------
  )                        end of look-behind
--------------------------------------------------------------------------------
  (?=                      look ahead to see if there is:
--------------------------------------------------------------------------------
    \\p{Lu}                Uppercase Unicode letter
--------------------------------------------------------------------------------
  )                        end of look-ahead