Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 用保留分隔符分隔字符串_R_Regex_Dataframe - Fatal编程技术网

R 用保留分隔符分隔字符串

R 用保留分隔符分隔字符串,r,regex,dataframe,R,Regex,Dataframe,我有一个数据场: ID Value 1 message "some text" 2 more messages "some more text" 我用以下方式分隔数据框中的一列: df <- df %>% separate(Value, c("message", "text"), ' "', remove = TRUE) 与此相反: ID message

我有一个数据场:

ID    Value
1    message "some text"
2    more messages "some more text"
我用以下方式分隔数据框中的一列:

df <- df  %>%
  separate(Value, c("message", "text"), ' "', remove = TRUE) 
与此相反:

ID    message             text
1    message          "some text"
2    more messages    "some more text"
我怎么能保留那个分隔符?我也试过,但犯了同样的错误:

df %>% 
  tidyr::extract(col = "Value",
                 into = c("message", "text"),
                 regex = '^(.*?) "(.*?)$', remove = FALSE)
你可以用

separate(Value, c("message", "text"), '\\s+(?=")', remove = TRUE) 
tidyr::extract(col = "Value",
                 into = c("message", "text"),
                 regex = '^([^"]*)\\s(".*)', remove = FALSE)

\s+(?=”
模式匹配一个或多个紧跟
字符的空白

或者,通过
提取
,您可以使用

separate(Value, c("message", "text"), '\\s+(?=")', remove = TRUE) 
tidyr::extract(col = "Value",
                 into = c("message", "text"),
                 regex = '^([^"]*)\\s(".*)', remove = FALSE)
看。regex是指:

  • ^
    -字符串的开头
  • ([^“]*)
    -第1组(
    消息
    ):除
  • \s
    -空白
  • (“*)
    -第2组(
    text
    ):
    ,然后尽可能多地添加除换行符以外的任何零个或多个字符
尝试使用
'\\s+(?=”)
分离(
'^([^”]*)\\s(“.*)”
提取(
重新打开,因为它不处理当前问题,它只对OP已经使用的代码有帮助。