有什么理由必须用R中的字符串(或更具体地说,是stringr)来表示正则表达式吗?
这个问题不是关于为什么我必须转义一个点以使它与正则表达式匹配,而是关于为什么我必须对它进行两次排除,因为它是在R中以字符串形式编写的
例如,如果我要将字符串“ a.b”转换为“ a,b”,则需要匹配一个文字点,即\。用正则表达式来讲。但是,由于正则表达式模式是在R中作为字符串输入的,因此我需要再加一层转义符,以“ \\”开头。有什么原因不能直接输入正则表达式模式,例如作为正则表达式(\。)? 也许这一切很快就会成为我的第二天性。作为初学者,我觉得这有点令人困惑。
答案 0 :(得分:1)
基本问题是正则表达式由R中的函数处理,它们不是语言的内置部分。内置它们将需要更改读取R代码时解析字符的方式。由于正则表达式不是该语言的中心,因此这被视为不必要的复杂性。
更具体地说,要让R解析器处理regex(\.)
,您需要一个新的保留字(regex
)和一个全新的解析模式,并要定义自己的复杂性。例如,""
和")"
都是合法的正则表达式。 (忽略引号,只考虑其中的字符。)将它们放在建议的语法中看起来像regex()
和regex())
,因此R解析器在碰到第一个{{ 1}}知道正则表达式在哪里结束。但是)
也是合法的,那么它怎么知道在哪里停下来?
将正则表达式放入字符串中会增加转义符的额外层,但至少不会使解析器的设计复杂化。