我正在尝试使用以下命令在 R 中进行正则表达式前瞻:

 sub(x = street.addresses, pattern = "\\s((?i)Street|(?i)St\\.?)(?=\\sNE)", replacement = " St")

我的目标是用 St 替换 Street,后面跟一个空格和定向 NE(如“东北”)。看起来前瞻再简单不过了,但我一直遇到错误:
Error in sub(x = streets, pattern = "\\s((?i)Street|(?i)St\\.?)(?=\\sNE)",:
invalid regular expression '\s((?i)Street|(?i)St\.?)(?=\sNE)', reason
'Invalid regexp'

没有前瞻的这个版本在 R 中工作正常,但是一旦我在搜索/替换中添加任何类型的前瞻,我就会遇到错误。同样,其他正则表达式 R 函数如 grep 似乎也有同样的问题。

我已经将该正则表达式复制/粘贴到 https://regex101.com/ 之类的引擎中,它似乎在那里工作正常,所以我很困惑。我是否缺少有关 R 中正则表达式的基本知识?

编辑:

这是直接从我的控制台复制的副本:
> street.addresses <- c("23 Charles Street NE","23 Charles St. NE")
> new.vec <- sub(x = street.addresses, pattern = "\\s((?i)Street|(?i)St\\.?)
(?=\\sNE)", replacement = " St")
Error in sub(x = street.addresses, pattern = "\\s((?i)Street|(?i)St\\.?)(?
=\\sNE)",  :
invalid regular expression '\s((?i)Street|(?i)St\.?)(?=\sNE)', reason
'Invalid regexp'

最佳答案

如果要使用前瞻,则需要在 Perl 模式下使用 sub:

street <- "123 Hudson Street NE, New York, NY"
sub(x = street, pattern = "\\s((?i)Street|(?i)St\\.?)(?=\\sNE)",
    replacement = " St", perl=TRUE)

[1] "123 Hudson St NE, New York, NY"

Demo

顺便说一句,如果您将 sub 的参数放在默认位置,那么您可以省略名称,留下一个更简洁的调用:
sub("\\s((?i)Street|(?i)St\\.?)(?=\\sNE)", " St", street, perl=TRUE)

关于r - 正向前瞻正则表达式 R,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48133979/

10-12 23:30