gpt4 book ai didi

r - 积极的前瞻性正则表达式 R

转载 作者:行者123 更新时间:2023-12-04 11:35:02 26 4
gpt4 key购买 nike

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

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

我的目标是用 St 替换 Street,St 后面跟着一个空格和方向 NE(如“Northeast”)。前瞻看起来再简单不过了,但我一直遇到错误:

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 中正则表达式的一些基本知识?

编辑:

这是直接来 self 的控制台的副本:

> 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'

最佳答案

如果你想使用 lookahead,你需要在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com