【发布时间】:2021-10-14 05:49:30
【问题描述】:
我在一些 Rscripts 中创建了一些关于 R 的教程。我需要一个没有答案的讲义集(HS)和一个编码集(CS),学生可以在其中编码。我需要一些帮助正则表达式来搜索 HO 中的答案部分,以便将其从 CS 中删除。
在 HS 中,我在答案之前/之后有开始 (#'YOUR_ANSWER) 和结束 (#'END_ANSWER) 标志。要创建 HO 集,我需要替换
YOUR_ANSWER
As_samp2 = 36
As_samp3 = 38
#'END_ANSWER
与
"space for answer".
所以如果我的文字在:
a = "#'YOUR_ANSWER
As_samp2 = 36
As_samp3 = 38
#'END_ANSWER"
我试过正则表达式,但没有替代品
b <-gsub(pattern = "YOUR_ANSWER(.*\n*)*#'END_ANSWER", a, replace="space for answer" )
如果我不使用正则表达式,即只需找到“YOUR_ANSWER” - 替换即有效
c <-gsub(pattern = "YOUR_ANSWER", a, replace="space for answer" )
如果我只是做正则表达式,正如预期的那样,所有文本都会被替换,即
d <- gsub(pattern = "(.*\n*)*", a, replace="space for answer" )
但组合不起作用。 正则表达式应该可以工作,请参阅:
https://regex101.com/r/USvzLF/1
所以一定有一些我没有得到的深层 R 魔法
b <- gsub(pattern = "YOUR_ANSWER(.*\n*)*END_ANSWER", a, replace="space for answer" )
c <- gsub(pattern = "YOUR_ANSWER", a, replace="space for answer" )
d <- gsub(pattern = "(.*\n*)*", a, replace="space for answer" )
我希望将 YOUR_ANSWER 和 END_ANSWER 之间的所有内容替换为答案空间 但什么也没有发生。有任何想法吗? 现在更新@r2evans 向我展示了工作正则表达式; 我要更改的 R 脚本是 https://pastebin.com/mnjpkUFk(即 myfile) 我用来尝试更改它的代码(在单独的 R 脚本中)是: FileM
【问题讨论】:
-
我很难理解您当前的文本是什么样的以及您希望将其转换成什么。请使用“之前”和“之后”转换的简化示例更新您的问题。
-
这是你想要的吗? regex101.com/r/FfunIi/1
-
不确定,但
gsub("#'YOUR_ANSWER.*END_ANSWER", "(space for answer)", a)工作得不够好?这实际上是您的b... 这也适用于我。 -
@MonkeyZeus 感谢您的帮助,但是 R 中的转义字符存在问题;错误消息是:错误:'\s' is an unrecognized escape in character string started ""YOUR_ANSWER\s". 所以在 Regex 101 中工作的东西在 R 中不起作用
-
要保留
#'YOUR_ANSWER和#'END_ANSWER并替换它们之间的内容吗?
标签: r regex string-substitution