r - R中匹配的&符号系列?
问题描述
我无法解决以下问题。请求所有人在这方面帮助我。
我的数据中有一系列&符号(&),我想用一些值替换一对&符号,但由于某种原因我无法做到。
我的尝试和例子:
string1 <- "This aa should be replaced: but this aaa shouldn't"
string2 <- "This && should be replaced: but this &&& shouldn't"
gsub("aa", "XXX", string1) #1.
gsub("\\baa\\b", "XXX", string1) #2.
gsub("&&", "XXX", string2) #3.
gsub("\\b&&\\b", "XXX", string2) #4.
上面,如果我想匹配 string1 中的 'aa',我可以有两种方法,
在方法 1(表示为:#1)中,我可以简单地传递 'aa' 但这也会部分匹配 'aaa',这是我不想要的,我希望我的正则表达式完全匹配成对的 'a',其中我的情况是'aa'。
为了解决这个问题,我使用了正则表达式(#2),在这种情况下它工作正常。
现在,在 string2 中,我期望有类似的行为,而不是匹配一对 'a' 我想匹配一对不匹配的 '&&'。
(#3) 尝试正在工作,但这不是我想要的结果,因为它也部分匹配'&&&',
(#4) 尝试由于某种原因不起作用,并且它没有替换字符串。
我的问题是:
1) Why pair of ampersands are not working with boundary conditions ?
2) What is the way around to solve this problem ?
我真的很难过,因此浪费了我一整天,真的感觉很糟糕,尝试在谷歌上找到解决方案,但尚未成功。
如果有人知道,如果它在那里,请将我重定向到一个帖子。或者如果有人发现它是重复的,请告诉我,我会删除它。
感谢您的帮助和阅读问题。
编辑:我的单词边界现在是空格。
输出:
> gsub("aa", "XXX", string1)
[1] "This XXX should be replaced: but this XXXa shouldn't"
> gsub("\\baa\\b", "XXX", string1)
[1] "This XXX should be replaced: but this aaa shouldn't"
>
> gsub("&&", "XXX", string2)
[1] "This XXX should be replaced: but this XXX& shouldn't"
> gsub("\\b&&\\b", "XXX", string2)
[1] "This && should be replaced: but this &&& shouldn't"
>
注意:我也检查了 perl=TRUE,但它不起作用。
解决方案
\b
边界一词的意思是:
有资格作为单词边界的三个不同位置:
- 在字符串的第一个字符之前,如果第一个字符是单词字符。
- 在字符串的最后一个字符之后,如果最后一个字符是单词字符。
- 在字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
当模式包含单词字符、字母、数字或字符时,"\\b&&\\b"
模式匹配。&&
_
要匹配空白边界,您可以使用
gsub("(?<!\\S)&&(?!\\S)", "XXX", string2, perl=TRUE)
模式匹配
(?<!\\S)
- 一个不紧跟在非空白字符前面的位置(即,必须在当前位置的左侧紧邻字符串或空白字符的开头)&&
- 文字子串(?!\\S)
- 一个不紧跟非空白字符的位置(即,当前位置的右侧必须有字符串结尾或空白字符)。
推荐阅读
- javascript - 用于检索对象上的某些元素的 Javascript 点表示法
- mysql - 使用内部联接从其他表中减去值
- python-3.x - 如何使用稳定的基线3让模型在循环中学习?
- python - 如何在python中对数组执行逻辑函数
- excel - 加速 VBA 中的循环
- python - 有一种方法可以随机打乱 keras 层吗?
- amazon-web-services - Elastic Beanstalk 和 EC2 实例连接:无法连接
- firebase - Firebase Firestore Flutter 运行多个查询与非规范化数据
- c++ - 如何解决库上的冲突声明?
- android - android正确使用jwt身份验证