首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只对"SN“、"+SN”或"-SN“表示祝贺,而不部分匹配R中的其他

只对"SN“、"+SN”或"-SN“表示祝贺,而不部分匹配R中的其他
EN

Stack Overflow用户
提问于 2015-03-19 00:49:20
回答 1查看 313关注 0票数 0

因此,我试图从一个“天气状况”列中获取grep天气数据,该列有针对不同天气类型的多个指示符。我试图分别grep "+SN","SN“和"-SN”,但有困难避免部分匹配。

这里有一个例子,说明了列中可能需要注意的内容:

c("-SN", " ", "SN FR", "HZ +SN", "SN", "+SN", " ", "+BC -SN")

加注"-SN“很好,但是对"+SN”表示祝贺是很棘手的,因为+本身就是正则表达式运算符。使用转义字符将给出以下错误:

> grep( "\+SN" ,aa) Error: '\+' is an unrecognized escape in character string starting ""\+"

此外,在没有"+SN“或"-SN”的情况下欢呼"SN“是一个挑战。如您所见,我无法使用^SN$^SN排除+或-符号,因为一列中可能有多个指示符,而我正在寻找的指示符可能在前面或后面。R中的grep是否与!=-v等价?你怎么会有这样的事呢?R中的正则表达式在功能上似乎更加有限。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-19 01:06:11

您需要使用基于否定查找的正则表达式。

代码语言:javascript
复制
> x <- c("-SN", " ", "SN FR", "HZ +SN", "SN", "+SN", " ", "+BC -SN")
> regmatches(x, regexpr("(?<!\\S)[-+]?SN(?!\\S)", x, perl=TRUE))
[1] "-SN" "SN"  "+SN" "SN"  "+SN" "-SN"

(?<!\\S)断言匹配之前不会有一个非空格字符。

使用锚,以便进行精确的字符串匹配.

代码语言:javascript
复制
> x <- c("-SN", " ", "SN FR", "HZ +SN", "SN", "+SN", " ", "+BC -SN")
> regmatches(x, regexpr("^[-+]?SN$", x))
[1] "-SN" "SN"  "+SN"

代码语言:javascript
复制
> grep("^[-+]?SN$", x, value=TRUE)
[1] "-SN" "SN"  "+SN"

单独获得SN (即没有+-前面的SN )

代码语言:javascript
复制
> x <- c("-SN", " ", "SN FR", "HZ +SN", "SN", "+SN", " ", "+BC -SN")
> regmatches(x, regexpr("(?<![+-])SN\\b", x, perl=TRUE))
[1] "SN" "SN"
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29135366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档