所以我正在尝试grep
来自“天气状况”列的天气数据,该列具有针对不同天气类型的多个指标。我试图分别“+ SN”,“SN”和“-SN”,但是我很难避免部分匹配。
以下是要插入的列中可能包含的内容的示例:
c("-SN", " ", "SN FR", "HZ +SN", "SN", "+SN", " ", "+BC -SN")
Grepping“-SN”很好,但是grepping“+ SN”很棘手,因为+是一个正则表达式运算符本身。使用转义字符会给我以下错误:
> grep( "\+SN" ,aa)
Error: '\+' is an unrecognized escape in character string starting ""\+"
此外,在没有获得“+ SN”或“-SN”的情况下轻击“SN”是一项挑战。正如您所看到的,我无法使用^SN$
或^SN
排除+或 - 符号,因为一列中可能有多个指标,我正在寻找的指标可能位于前面或后面另一个指标。 R中的grep是否有!=
或-v
等价物?你会怎么样这样的? R中的正则表达式在功能上似乎更有限。
感谢。
答案 0 :(得分:5)
您需要使用基于负面外观的正则表达式。
> 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)
断言匹配不会以非空格字符开头。
OR
按顺序使用锚点来进行精确的字符串匹配。
> x <- c("-SN", " ", "SN FR", "HZ +SN", "SN", "+SN", " ", "+BC -SN")
> regmatches(x, regexpr("^[-+]?SN$", x))
[1] "-SN" "SN" "+SN"
OR
> grep("^[-+]?SN$", x, value=TRUE)
[1] "-SN" "SN" "+SN"
OR
单独SN
SN
,+
之前没有-
或> x <- c("-SN", " ", "SN FR", "HZ +SN", "SN", "+SN", " ", "+BC -SN")
> regmatches(x, regexpr("(?<![+-])SN\\b", x, perl=TRUE))
[1] "SN" "SN"
{{1}}