【发布时间】:2020-09-13 01:53:47
【问题描述】:
我正在完善this的答案;并发现下面给出的正则表达式在R 中无法正常工作(根据其含义)。
+?on.*$
根据我对正则表达式的理解,上面的正则表达式匹配:
懒惰地空格一次或多次,后跟
on后跟任何内容(换行符除外)直到结束。
输入:
Posted by ondrej on 29 Feb 2020.
Posted by ona'je on 29 Feb 2020.
OUTPUT(根据我的说法,如果测试字符串中的上述正则表达式模式被替换为“”)
Posted by
Posted by
当我尝试在python (implementation here)、javascript 和java (implementation here) 中测试它时;我得到了预期的结果。
const myString = "Posted by ondrej on 29 Feb 2020.\nPosted by ona'je on";
console.log(myString.replace( new RegExp(" +?on.*$","gm"),""));
另一方面,如果我想在R (implementation here) 中实现相同的正则表达式;我得到的结果是
Posted by ondrej
Posted by ona'je
这是出乎意料的。
怀疑
我认为R 的正则表达式解析器的工作方式可能不同(可能从右到左)。我阅读了R 中正则表达式如何工作的文档,但发现上述正则表达式与其他语言没有什么不同。我可能在这里遗漏了一些东西。我不精通R,但就我的正则表达式知识而言;我相信上述正则表达式应该可以在java、javascript 和python(也可能在pcre 中。)适用于每个标准正则表达式引擎(据我所知)。我的问题是为什么上述正则表达式在 R 中的工作方式不同?
【问题讨论】:
-
我认为您需要在 R 中设置
perl = TRUE以获得作为选项传递给regex的相同结果。见?regex。 -
谢谢@edsandorf。我可以编写其他正则表达式来获得答案。但是,我很想知道为什么
R会出现这种行为?我对上述正则表达式的理解是错误的还是编译器是从右到左工作的?
标签: javascript java python r regex