【问题标题】:Regex for literal curly brackets in R [duplicate]R中文字大括号的正则表达式[重复]
【发布时间】:2019-03-29 03:27:55
【问题描述】:

我不是 R 中 Regex 方面的专家,但我觉得我已经阅读了足够长的文档,但仍然很短,所以我在这里发帖。

我正在尝试替换以下字符串,全部按字面意思写:

a = "\\begin{tabular}"
a = gsub("\\begin{tabular}", "\\scalebox{0.7}{
\\begin{tabular}", a)

期望的输出是:cat('\\scalebox{0.7}{ \\begin{tabular}')

所以我知道我需要将第一个“\”转义为“\”,但是当我转义括号时,我得到了

Error: '\}' is an unrecognized escape in character string starting...

【问题讨论】:

  • 抱歉,我补充了,但实际上只是第二部分。
  • 我认为您可能需要您的示例输入为 a = "\\begin{tabular}" - 否则它不会包含文字“\begin”
  • 不确定这是否是您需要的? cat(sub("\\begin{tabular}", "\\scalebox{0.7}{\\begin{tabular}", a, fixed = TRUE)) ?
  • cat(gsub("\\\\begin\\{tabular\\}", "\\\\scalebox{0.7}{\\\\begin{tabular}", a))
  • @MrFlick,这是有道理的。如果pattern 采用正则表达式,这就解释了为什么我们也需要四个反斜杠来表示文字“\”。但是,如果不是正则表达式,为什么replacement 中的一个“\”需要四个反斜杠。

标签: r regex escaping


【解决方案1】:

在您的情况下,由于您要替换固定字符串,您可以简单地设置 fixed = T 选项来完全避免正则表达式。

a = "\\begin{tabular}"
a = gsub("\\begin{tabular}", "\\scalebox{0.7}{\n\\begin{tabular}", x=a, fixed= T)

并使用\n 作为换行符。

如果您确实想使用正则表达式,则需要使用 两个 反斜杠而不是一个反斜杠来转义模式中的花括号。

例如,

a = "\\begin{tabular}"

gsub(pattern = "\\{|\\}", replacement = "_foo_", x=a)

[1] "\\begin_foo_tabular_foo_"

或者,您可以将大括号括在方括号中,如下所示:

例如,

a = "\\begin{tabular}"

gsub(pattern = "[{]|[}]", replacement = "_foo_", x=a)

[1] "\\begin_foo_tabular_foo_"

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2015-06-23
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多