R中用于大括号的递归正则表达式
Recursive regex in R for curly braces
我有以下模式的一些文本字符串。
x = "sdfwervd \calculus{fff}{\trt{sdfsdf} & \trt{sdfsdf} & \trt{sdfsdf} \{} sdfsdf & sdfsdf & sefgse3 } aserdd wersdf sewtgdf"
我想用正则表达式捕获字符串\calculus{fff}
中的文本"fff"
并替换为其他内容
此外,我想捕获 \calculus{.+}
之后的第一个 {
和它对应的右大括号 }
.
[= 之间的字符串30=]
如何在 R 中使用正则表达式执行此操作?
以下捕获了最后一个大括号之前的所有内容。
gsub("(\calculus\{)(.+)(\})", "", x)
对于第二个任务,您可以使用递归方法结合 regmatches()
和 gregexpr()
in base R
:
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 }"
我有以下模式的一些文本字符串。
x = "sdfwervd \calculus{fff}{\trt{sdfsdf} & \trt{sdfsdf} & \trt{sdfsdf} \{} sdfsdf & sdfsdf & sefgse3 } aserdd wersdf sewtgdf"
我想用正则表达式捕获字符串
\calculus{fff}
中的文本"fff"
并替换为其他内容此外,我想捕获
[= 之间的字符串30=]\calculus{.+}
之后的第一个{
和它对应的右大括号}
.
如何在 R 中使用正则表达式执行此操作?
以下捕获了最后一个大括号之前的所有内容。
gsub("(\calculus\{)(.+)(\})", "", x)
对于第二个任务,您可以使用递归方法结合 regmatches()
和 gregexpr()
in base R
:
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 }"