2017-08-10 53 views
1

匹配字符串的問題可能很容易,但我是新來R,我試圖從一列中提取一些字符串以該字符串「小學,小學生」匹配。所以,我想這個用逗號

grepl("(.*?)primary,[:space:] pupils(.*?)", df$some_column,ignore.case=TRUE) 

grepl("(.*?)primary,[:space:](.*?)", df$some_column,ignore.case=TRUE) 

但他們都不似乎工作。有人有一個想法?

+0

不要 「說話」'r',但你'[:空間:]'**和**作爲第一表達的實際空間。這是打算嗎? – ClasG

+0

注意'。*?'在'grep' /'grepl'多餘的,因爲這些功能允許* *局部匹配(=沒有全字符串匹配是必需的)。 –

回答

2

你可以使用

grepl("primary,[[:space:]]*pupils", df$some_column,ignore.case=TRUE) 

的模式會匹配:

  • primary, - 一個liteal子(不區分大小寫模式是ON由於ignore.case=TRUE參數)
  • [[:space:]]* - 0或多個空格
  • pupils - 字面pupils子(情況insensitiv E)

[:space:] POSIX字符類應包含在括號表達式,否則,它是內部[...]定義的單個字符,即,[:space:]將匹配單個字符匹配::space

看到一個small demo

x <- c("1 primary, pupils", "2 PRIMARY,pupils tex", "no value") 
grepl("primary,[[:space:]]*pupils", x,ignore.case=TRUE) 
## => [1] TRUE TRUE FALSE 
grep("primary,[[:space:]]*pupils", x,ignore.case=TRUE, value=TRUE) 
## => [1] "1 primary, pupils" "2 PRIMARY,pupils tex"