我正在尝试替换以以下开头的字符串中的实例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"
See the 在线 R 演示 http://ideone.com/qI9jWB
当你逃脱时(
,它匹配文字(
符号,所以,在你的模式中,\\(?![^<]*>\\)
匹配一个(
1次或0次,那么!
,然后 0+ 个字符,除了<
, then >
和一个字面意思)
。在我的正则表达式中,(?![^<]*>)
是一个否定的前瞻,如果abc
后跟任何 0+ 字符,除了<
然后一个>
.
Without perl=TRUE
, R gsub
使用不支持环视(甚至环视)的 TRE 正则表达式风格。因此,你必须告诉gsub
via perl=TRUE
您希望使用 PCRE 引擎。
See the 在线 PCRE 正则表达式演示 https://regex101.com/r/pF0hON/1.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)