因此,我试图从一个“天气状况”列中获取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中的正则表达式在功能上似乎更加有限。
谢谢。
发布于 2015-03-19 01:06:11
您需要使用基于否定查找的正则表达式。
> 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)断言匹配之前不会有一个非空格字符。
或
使用锚,以便进行精确的字符串匹配.
> x <- c("-SN", " ", "SN FR", "HZ +SN", "SN", "+SN", " ", "+BC -SN")
> regmatches(x, regexpr("^[-+]?SN$", x))
[1] "-SN" "SN" "+SN"或
> grep("^[-+]?SN$", x, value=TRUE)
[1] "-SN" "SN" "+SN"或
单独获得SN (即没有+或-前面的SN )
> x <- c("-SN", " ", "SN FR", "HZ +SN", "SN", "+SN", " ", "+BC -SN")
> regmatches(x, regexpr("(?<![+-])SN\\b", x, perl=TRUE))
[1] "SN" "SN"https://stackoverflow.com/questions/29135366
复制相似问题