我正在尝试使用以下命令在 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/