下面的模式中有一些文本字符串。
x = "sdfwervd \calculus{fff}{\trt{sdfsdf} & \trt{sdfsdf} & \trt{sdfsdf} \\{} sdfsdf & sdfsdf & sefgse3 } aserdd wersdf sewtgdf""fff"中的文本\calculus{fff},并将其替换为其他内容。\calculus{.+}之后的第一个\calculus{.+}和相应的大括号}之间的字符串。如何用R中的正则表达式来实现这一点?
下面是最后一次卷曲支撑之前的所有内容。
gsub("(\\calculus\\{)(.+)(\\})", "", x)发布于 2018-04-03 10:19:26
对于第二个任务,可以结合regmatches()和基本R中的gregexpr()使用递归方法。
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)))
这将产生找到的子匹配的列表:
[[1]]
[1] "{fff}"
[2] "{\\trt{sdfsdf} & \\trt{sdfsdf} & \\trt{sdfsdf} \\{} sdfsdf & sdfsdf & sefgse3 }"https://stackoverflow.com/questions/49627083
复制相似问题