gpt4 book ai didi

r - R 中的负前瞻未按预期运行

转载 作者:行者123 更新时间:2023-12-04 23:00:32 24 4
gpt4 key购买 nike

我正在尝试替换以 abc 开头的字符串中的实例在我在 R 中处理的文本中。输出文本在 HTML 中经过几次高亮显示,因此我需要替换以忽略 HTML 插入符号中的文本。

以下似乎在 Python 中工作,但我在 R 中的正则表达式没有得到任何点击。感谢所有帮助。

test <- 'abcdef abc<span abc>defabc abcdef</span> abc defabc'
gsub('\\babc\\(?![^<]*>\\)', 'xxx', test)

预期输出:
xxxdef xxx<span abc>defabc xxxdef</span> xxx defabc

相反,它忽略了 abc 的所有实例.

最佳答案

您需要删除不必要的转义并使用 perl=TRUE :

test <- 'abcdef abc<span abc>defabc abcdef</span> abc defabc'
gsub('\\babc(?![^<]*>)', 'xxx', test, perl=TRUE)
## => [1] "xxxdef xxx<span abc>defabc xxxdef</span> xxx defabc"

online R demo

当你逃跑时 ( ,它匹配文字 (符号,因此,在您的模式中, \\(?![^<]*>\\)匹配 ( 1 或 0 次,然后 ! ,然后是除 < 以外的 0+ 个字符,然后 >和文字 ) .在我的正则表达式中, (?![^<]*>)如果 abc 匹配失败,则为负前瞻。后跟除 < 之外的任何 0+ 个字符然后是 > .

perl=TRUE , R gsub使用不支持环视(甚至超前)的 TRE 正则表达式风格。因此,您必须告诉 gsub通过 perl=TRUE您希望使用 PCRE 引擎。

online PCRE regex demo .

关于r - R 中的负前瞻未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43458531/

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