给定多组模式,您如何在该模式中的特定组上分割字符串?

我有一个用于分割向量的模式:"([^ ])(,)([^ ])"。但是向量应在第二组(,)上分割,使第一和第三项分别具有第一项和第二项。

我尝试添加非捕获模式?:,但似乎不起作用。

my_string <- 
  "FIRST item,SECOND,item,third ITEM,FOURTH item"

strsplit(my_string,"(?:[^ ])(,)(?:[^ ])")[[1]]

我得到"FIRST ite" "ECOND,ite" "hird ITE" "OURTH item",我需要一个模式来得到"FIRST item" "SECOND,item" "third ITEM" "FOURTH item"

ccider 回答:给定多组模式,您如何在该模式中的特定组上分割字符串?

我找到了使用

的解决方案
stringr::str_split(my_string,"(?<=[^ ])(,)(?=[^ ])")
,

您仍然可以使用基本的R strsplit函数,但是带有perl=TRUE参数来启用PCRE rege引擎并使用 lookarounds 而不是使用 non-捕获模式中的组以检查,周围的非空白字符:

my_string <- "FIRST item,SECOND,item,third ITEM,FOURTH item"
strsplit(my_string,"(?<=\\S),(?=\\S)",perl=TRUE)[[1]]
## =>[1] "FIRST item"   "SECOND,item" "third ITEM"   "FOURTH item" 

请参见online R demoregex demo。详细信息:

  • (?<=\S)-向后的正向查找,要求在当前位置之前紧跟一个非空白字符
  • ,-逗号
  • (?=\S)-正向超前,需要在当前位置之后立即输入非空白字符。
,

不需要复杂的正则表达式。这是一个可以使用的简单正则表达式:,(?=[a-zA-Z])

说明:

  • ,:匹配逗号
  • (?=[a-zA-Z]):但只有字母后跟字母a到z 不区分大小写
my_string <- "FIRST item,",(?=[a-zA-Z])",perl = TRUE)
#> [[1]]
#> [1] "FIRST item"   "SECOND,item" "third ITEM"   "FOURTH item"
stringr::str_split(my_string,(?=[a-zA-Z])")
#> [[1]]
#> [1] "FIRST item"   "SECOND,item" "third ITEM"   "FOURTH item"
本文链接:https://www.f2er.com/2894456.html

大家都在问