R 缺少gsub以在两个逗号之间添加字符串

R 缺少gsub以在两个逗号之间添加字符串,r,pattern-matching,gsub,R,Pattern Matching,Gsub,我有以下字符串: a <- "2015,,,,6GR,09,PRIVATE,NP,001" 我试过下面这句话: gsub("([,])([,])", "\\1YES\\2", a) 但我的输出是: "2015,YES,,YES,6GR,09,PRIVATE,NP,001" 有人能告诉我为什么GSB在中间缺少两个逗号吗?我怎么能解决这个问题? < P>我会尝试用另一种方式来解决它,而不是试图回答你的问题,我不能。 就这么做吧: a= unlist(strsplit(a,",")) a[

我有以下字符串:

a <- "2015,,,,6GR,09,PRIVATE,NP,001"
我试过下面这句话:

gsub("([,])([,])", "\\1YES\\2", a)
但我的输出是:

"2015,YES,,YES,6GR,09,PRIVATE,NP,001"

有人能告诉我为什么GSB在中间缺少两个逗号吗?我怎么能解决这个问题?

< P>我会尝试用另一种方式来解决它,而不是试图回答你的问题,我不能。 就这么做吧:

a= unlist(strsplit(a,","))
a[a==""]="YES"
a=paste(a,collapse=",")

我会试着用另一种方式为你解决问题,而不是试图回答你的问题,我不能回答

就这么做吧:

a= unlist(strsplit(a,","))
a[a==""]="YES"
a=paste(a,collapse=",")
您可以使用积极的:

或者,也可以是积极的:

gsub((?您可以使用正值:

或者,也可以是积极的:


gsub((?问题是,在匹配
后,第二个逗号不会被重新扫描。请在
“\\B”
匹配非单词边界的地方尝试此操作,以避免必须匹配第二个逗号。只要您没有以非单词字符开头的字段,例如
“a,,,,,;B”
。它也不适用于第一个和最后一个字段,但问题中的表达式也不适用于这些字段,因此我们假设这不是问题

gsub(",\\B", ",YES", a)
## [1] "2015,YES,YES,YES,6GR,09,PRIVATE,NP,001"

问题是,在匹配
后,第二个逗号不会被重新扫描。请在
“\\B”
匹配非单词边界的地方尝试此操作,以避免必须匹配第二个逗号。只要您没有以非单词字符开头的字段,例如
“a,,,,,;B”,则此操作应该有效
。它也不适用于第一个和最后一个字段,但问题中的表达式也不适用于这些字段,因此我们假设这不是问题

gsub(",\\B", ",YES", a)
## [1] "2015,YES,YES,YES,6GR,09,PRIVATE,NP,001"

我在代码中尝试了perl=T,认为它可以修复。我不知道积极的前瞻,非常感谢。@kukushkin:perl=TRUE不会修复您的正则表达式,只需要支持“环顾四周”即可gsub正则表达式中的功能。添加了一个简短的解释。我在代码中尝试了perl=T,认为它会修复。我不知道积极的前瞻性,非常感谢。@kukushkin:perl=TRUE不会修复您的正则表达式,只需要支持gsub正则表达式中的“环顾四周”功能。添加了一个简短的解释
gsub(",\\B", ",YES", a)
## [1] "2015,YES,YES,YES,6GR,09,PRIVATE,NP,001"