在R中的模式匹配前后获取字符

时间:2018-12-23 00:22:01

标签: r regex

让我们说我在R中有一个字符串:

str <- "abc abc cde cde"

然后我使用regmatches和gregexpr来查找我的字符串中有多少个“ b”

regmatches(str, gregexpr("b",str))

但是我想要包含字母b的所有内容的输出。 这样的输出是:“ abc”,“ abc”。

谢谢!

4 个答案:

答案 0 :(得分:3)

tmp <- "abc abc cde cde"

将字符串分成单独的元素,grep表示“ b”,返回元素:

grep("b", unlist(strsplit(tmp, split = " ")), value = TRUE)

答案 1 :(得分:1)

查找前后的非空格,例如:

regmatches(str, gregexpr("\\S*b\\S*", s))
# [[1]]
# [1] "abc" "abc"

特殊的正则表达式字符记录在?regex中。在这种情况下,\\s匹配“任何空格字符”,而\\S是其否定符,因此,任何非空格字符都将匹配。您可以更具体一些,例如\\w(“单词”字符,与[[:alnum:]_]相同)。 *表示等于或大于零,而+表示等于或大于零(强制执行某些操作)。

答案 2 :(得分:0)

我想你的意思是你想找到包含b单词。做到这一点的一个正则表达式是

\w*b\w*

\w*匹配0个或多个单词字符,即a-z,A-Z,0-9和下划线字符。

Demo

答案 3 :(得分:0)

这是使用strsplitgrepl的基本R选项:

str <- "abc abc cde cde"
words <- strsplit(str, "\\s+")[[1]]
idx <- sapply(words, function(x) { grepl("b", x)})
matches <- words[idx]
matches

[1] "abc" "abc"