r - 正则表达式 - 获取匹配大括号内的内容
问题描述
我有一个表格文本:
text <- "\\examples{afunction(x = list()){\nx<-3\n}y<-2 server <- function(input, output, session) {\n output$res_bttn1 <- renderPrint({input$bttn1})\n}\n}"
我想获得\\examples{}
(\n
最后没有)的内容,即
"afunction(x = list()){\nx<-3\n}y<-2 server <- function(input, output, session) {\n output$res_bttn1 <- renderPrint({input$bttn1})\n}"
问题是里面还有其他大括号\\examples{}
。因此,我认为我必须找到一个正则表达式来检测哪个}
关闭\\examples{
(但我对如何获得相同结果的其他建议持开放态度)。
我怎样才能做到这一点?优选碱R溶液。
解决方案
您可以使用
\\examples({([^{}]*?(?:(?1)[^{}]*?)*)\s*})
请参阅正则表达式演示。
细节
\\examples
- 一个\examples
字符串({([^{}]*?(?:(?1)[^{}]*?)*)\s*})
- 第 1 组(这是必要的,因为正则表达式子例程(?1)
将递归此子模式):{
- 一个{
字符([^{}]*?(?:(?1)[^{}]*?)*)
- 第 2 组(您需要的值):[^{}]*?
- 零个或多个字符{
,}
尽可能少(?:(?1)[^{}]*?)*
- 整个第 1 组模式出现零次或多次,后跟零个或多个字符{
,}
尽可能少
\s*
- 零个或多个空格(修剪尾随之前的空格}
)}
- 一个}
字符
请参阅R 演示:
text <- "\\examples{afunction(x = list()){\nx<-3\n}y<-2 server <- function(input, output, session) {\n output$res_bttn1 <- renderPrint({input$bttn1})\n}\n}"
pattern = "\\\\examples({([^{}]*?(?:(?1)[^{}]*?)*)\\s*})"
unlist(regmatches(text, regexec(pattern, text, perl=TRUE)))[3]
# => [1] "afunction(x = list()){\nx<-3\n}y<-2 server <- function(input, output, session) {\n output$res_bttn1 <- renderPrint({input$bttn1})\n}"
推荐阅读
- kubernetes - “oc进程”将特殊字符“&”和“>”转换为unicode
- python - 无法从数据框中创建简单的 dict
- installation - 对使用 Homebrew 安装的脚本设置可执行权限
- java - 如何修复 Google 移动广告集成错误
- excel - 循环搜索同一行特定范围列的文本,一旦找到,在不同行但同一列中返回值
- php - 首次安装 Grav 时如何解决 PHPModules 错误?
- nginx - Nginx:Access-Control-Allow-Origin 不适用于特定位置
- python - 如何在 python 2.7 中刷新 StringIO()?
- mysql - 查找并返回前员工但不是当前员工
- css - 将 NativeScript 主题应用于从 NativeScript 模板下载的项目