2016-10-10 115 views
0

的開始和結束時,我有:刪除字符串

c("Enrolment in secondary school, private school") 

,我想有

c("secondary school) 

Enrolment in和第一,是固定的模式。

我完全不熟悉正則表達式。有人可以幫忙嗎?

+0

'stringr :: str_replace函數( str,「註冊在(。+),。+」,「\\ 1」)'可能會有訣竅。括號定義了一個分組,可以按順序在後面引用(即第n組括號可以用'\\ n'來引用)。顯然它不是一個非常有彈性的正則表達式,但它通過了你的測試用例。 –

+0

謝謝Akhil,但是這個表達式只刪除了「註冊」部分,但不包含「,」和其後的所有內容。 – cimentadaj

+0

你是否在封閉括號後加了',。+'?對我來說工作得很好 –

回答

3

以下是一些替代方案。如果x是單個字符串或字符串矢量(除(3)僅用於單個字符串 - (3a)是矢量版本(3)),它們不使用任何程序包並且它們都工作。

他們使用該輸入:

x <- "Enrolment in secondary school, private school" 

1)GSUB這將替換前綴,一氣呵成用空字符串後綴:

gsub("Enrolment in |,.*", "", x) 
## [1] "secondary school" 

2)子這確實相同但在單獨的sub調用:

sub(",.*", "", sub("Enrolment in ", "", x)) 
## [1] "secondary school" 

2A)子/子因爲我們知道前綴的長度,我們可以用substring更換sub調用之一:

sub(",.*", "", substring(x, 14)) 
## [1] "secondary school" 

3)strsplit雖然人們一般不會使用這種解決方案一個可以使用strsplit如下所示:

strsplit(x, "Enrolment in |,.*")[[1]][2] 
## [1] "secondary school" 

3a)的爲了概括(3)串的矢量:

sapply(strsplit(x, "Enrolment in |,.*"), "[", 2) 
## [1] "secondary school" 

4)函數read.table這將替換用逗號前綴,然後讀取其作爲使用read.table摘第二列逗號分隔的字段:

read.table(text = sub("Enrolment in ", ",", x), sep = ",", as.is = TRUE)[[2]] 
## [1] "secondary school" 
2

例如:

library(stringr) 

str = c("Enrolment in secondary school, private school") 

str_extract(str, "(?<=Enrolment in)([^,]+)") 
#> [1] "secondary school" 

您還可以通過做:

  1. 刪除 「招生」
  2. 拆分上逗號
  3. 以它的第一部分

例如:

(remove_enrol <- gsub("Enrolment in ", "", str)) 
#> [1] "secondary school, private school" 

(result = strsplit(remove_enrol, ",")[[1]][[1]]) 
#> [1] "secondary school"