【问题标题】:Conditional replacement of characters in a string pursuant to the use certain tags根据使用某些标签有条件地替换字符串中的字符
【发布时间】:2022-08-12 23:54:03
【问题描述】:

我想根据某些标签有条件地替换文本中的字符。例如,在以下字符串中。

text <- \"In Spanish, Brasil is written as <Brazil>, for some reason.\"

我想转换尖括号外的文本。我 目前知道如何反其道而行之。我可以使用 gsub() 来识别 特定字符串并使用以下命令更改一些字符:

gsub(\"(<.*)z(.*?>)\", \"\\\\1s\\\\2\", text)
[1] \"In Spanish, Brasil is written as <Brasil>, for some reason.\"

但我想做的是改变外面的文字而不影响 尖括号内的文本,例如:

gsub(\"Brasil\", \"Brazil\", text) 
[1] \"In Spanish, Brazil is written as <Brazil>, for some reason.\"

预期结果,仅更改尖括号外的文本:

[1] \"In Spanish, Brazil is written as <Brazil>, for some reason.\"

我如何有条件地应用替换,以便角度内的文本 括号不受影响?我是否需要根据尖括号的存在先拆分字符串,应用替换,然后合并所有字符串?或者我可以让它与 gsub() 和一个条件一起工作吗?

    标签: r regex gsub


    【解决方案1】:

    您需要在此处使用 PCRE 正则表达式(注意 perl=TRUE 参数):

    gsub("<[^<>]*>(*SKIP)(*F)|Brasil", "Brazil", text, perl=TRUE)
    

    细节

    • &lt;[^&lt;&gt;]*&gt;(*SKIP)(*F) - &lt;,除&lt;&gt;之外的零个或多个字符,然后是&gt;,匹配在该位置失败,正则表达式引擎开始从失败位置搜索下一个匹配
    • | - 或
    • Brasil - 一个固定的字符序列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-23
      • 2013-11-19
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      相关资源
      最近更新 更多