Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
Regex gsub跨R中的多条线(dotall)_Regex_R_Gsub - Fatal编程技术网

Regex gsub跨R中的多条线(dotall)

Regex gsub跨R中的多条线(dotall),regex,r,gsub,Regex,R,Gsub,是否可以在R中使用gsub调用dotall表达式?基本上,我试图提取一段跨越多行的文本。考虑下面的例子: eg.df <- c("----------", " ", "keep", " ", "keep this too", " ", "----------", " ", "Delete this line and everything after", "Delete this one too", " ", "And delete this one") 因此,产生的输出将

是否可以在R中使用
gsub
调用dotall表达式?基本上,我试图提取一段跨越多行的文本。考虑下面的例子:

eg.df <- c("----------", " ", "keep", " ", "keep this too", " ", "----------", " ", 
   "Delete this line and everything after", "Delete this one too", 
   " ", "And delete this one")
因此,产生的输出将是:

[1] "----------"                           
[2] " "                                    
[3] "keep"                                 
[4] " "                                    
[5] "keep this too"                        
[6] " "               
你可以试试

  strsplit(sub('-+, +,[A-Za-z]+[^-]+$', '', 
         paste(eg.df, collapse= ',')), ',')[[1]]
  #[1] "----------"    " "             "keep"          " "            
  #[5] "keep this too" " "
或者正如@hwnd评论的那样

  strsplit(sub('-+[^-]+\\z', '', paste(eg.df, collapse = '_'), 
                      perl=T), '_')[[1]]

可能只是
eg.df[cumsum(grepl(“-”,eg.df))==0]
或类似的东西
gsub
实际上与此无关,因为您有一个向量,而不是一个字符串。这可以工作,但我有其他带有
-----------
的行需要保留。不确定您的意思。你能提供一个例子吗?刚刚更新了这个例子那么你如何决定删除第二个
---
之后的所有内容而不是第一个?你能解释一下吗?我不明白OP想要什么。或者换句话说,这在概念上与我的建议有什么不同?@DavidArenburg我认为OP想要删除所有这些行,如果有一个带有模式“-----”的文本字符串,然后是“”,然后是一些文本字符串。因此,我所做的是,将
例如.df
与分隔符粘贴为
,并使用
中遵循这些模式的
lookarounds
,并将其替换为
'
。最后,
strsplit
基于
的字符串。我猜可能是这样的,虽然我不确定我会使用
strsplit(sub('-+[^-]+\\z','',粘贴(例如,df,collapse='''.'''''.'),perl=T),'.'''.'''.[[1]]
@akrun-抱歉,我没有看到它被编辑以反映我所做的更改。
  strsplit(sub('-+[^-]+\\z', '', paste(eg.df, collapse = '_'), 
                      perl=T), '_')[[1]]