首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >花括号R中的递归正则表达式

花括号R中的递归正则表达式
EN

Stack Overflow用户
提问于 2018-04-03 09:51:09
回答 1查看 600关注 0票数 1

下面的模式中有一些文本字符串。

代码语言:javascript
复制
x = "sdfwervd \calculus{fff}{\trt{sdfsdf} & \trt{sdfsdf} & \trt{sdfsdf} \\{} sdfsdf & sdfsdf & sefgse3 } aserdd wersdf sewtgdf"
  1. 我希望使用regex捕获字符串"fff"中的文本\calculus{fff},并将其替换为其他内容。
  2. 此外,我想捕捉\calculus{.+}之后的第一个\calculus{.+}和相应的大括号}之间的字符串。

如何用R中的正则表达式来实现这一点?

下面是最后一次卷曲支撑之前的所有内容。

代码语言:javascript
复制
gsub("(\\calculus\\{)(.+)(\\})", "", x)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-03 10:19:26

对于第二个任务,可以结合regmatches()和基本R中的gregexpr()使用递归方法。

代码语言:javascript
复制
x <- c("sdfwervd \\calculus{fff}{\\trt{sdfsdf} & \\trt{sdfsdf} & \\trt{sdfsdf} \\{} sdfsdf & sdfsdf & sefgse3 } aserdd wersdf sewtgdf")

pattern <- "\\{(?:[^{}]*|(?R))*\\}"
(result <- regmatches(x, gregexpr(pattern, x, perl = TRUE)))

这将产生找到的子匹配的列表:

代码语言:javascript
复制
[[1]]
[1] "{fff}"                                                                          
[2] "{\\trt{sdfsdf} & \\trt{sdfsdf} & \\trt{sdfsdf} \\{} sdfsdf & sdfsdf & sefgse3 }"

a demo for the expression on regex101.com

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49627083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档