在空格处拆分 R 字符串,但当空格位于单引号之间时则不拆分

2024-02-06

我有一组丑陋且复杂的字符串,我必须将其拆分:

vec <- c("'01'", "'01' '02'", 
         "#bateau", "#bateau #batiment",
         "#'autres 32'", "#'autres 32' #'batiment 30'", "#'autres 32' #'batiment 30' #'contenu 31'",
         "#'34'", "#'34' #'33' #'35'")
vec
[1] "'01'"                                      "'01' '02'"                                
[3] "#bateau"                                   "#bateau #batiment"                        
[5] "#'autres 32'"                              "#'autres 32' #'batiment 30'"              
[7] "#'autres 32' #'batiment 30' #'contenu 31'" "#'34'"                                    
[9] "#'34' #'33' #'35'" 

我需要在有空格的地方分割字符串(),除非之间有空格'。所以在上面的例子中,'01' '02'会成为'01' and '02' while #'autres 32' #'batiment 30'会成为#'autres 32' and #'batiment 30'.

我尝试从中获得灵感这个问题 https://stackoverflow.com/questions/45811754/regex-match-everything-except-words-between-quotes,但并没有走远:

strsplit(vec, "(\\s[^']+?)('.*?'|$)")

因为这个解决方案分割了一些不应该的空间,也让我丢失了一些信息。

分割的结果应该是这样的:

res <- c("'01'", "'01'", "'02'", 
         "#bateau", "#bateau", "#batiment",
         "#'autres 32'", "#'autres 32'", "#'batiment 30'", "#'autres 32'", "#'batiment 30'", "#'contenu 31'",
         "#'34'", "#'34'", "#'33'", "#'35'")

分割该字符串的正确正则表达式是什么?

Thanks


您可以使用

strsplit(vec, "'[^']*'(*SKIP)(*F)|\\s+", perl=TRUE)

See the R demo https://rextester.com/KYOHV49816正则表达式演示 https://regex101.com/r/SEa8PZ/1 online.

Details

  • '[^']*'(*SKIP)(*F) - ',然后是除' (see [^']*) 进而',然后丢弃这个匹配的文本,并从当前匹配失败的位置开始搜索下一个匹配(参见(*SKIP)(*F) https://stackoverflow.com/questions/24534782/how-do-skip-or-f-work-on-regex)
  • | - or
  • \s+- 1 个以上空白字符。

由于它是 PCRE 模式,因此perl=TRUE是强制性的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在空格处拆分 R 字符串,但当空格位于单引号之间时则不拆分 的相关文章

随机推荐