的開始和結束時,我有:刪除字符串
c("Enrolment in secondary school, private school")
,我想有
c("secondary school)
Enrolment in
和第一,
是固定的模式。
我完全不熟悉正則表達式。有人可以幫忙嗎?
的開始和結束時,我有:刪除字符串
c("Enrolment in secondary school, private school")
,我想有
c("secondary school)
Enrolment in
和第一,
是固定的模式。
我完全不熟悉正則表達式。有人可以幫忙嗎?
以下是一些替代方案。如果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"
例如:
library(stringr)
str = c("Enrolment in secondary school, private school")
str_extract(str, "(?<=Enrolment in)([^,]+)")
#> [1] "secondary school"
您還可以通過做:
例如:
(remove_enrol <- gsub("Enrolment in ", "", str))
#> [1] "secondary school, private school"
(result = strsplit(remove_enrol, ",")[[1]][[1]])
#> [1] "secondary school"
'stringr :: str_replace函數( str,「註冊在(。+),。+」,「\\ 1」)'可能會有訣竅。括號定義了一個分組,可以按順序在後面引用(即第n組括號可以用'\\ n'來引用)。顯然它不是一個非常有彈性的正則表達式,但它通過了你的測試用例。 –
謝謝Akhil,但是這個表達式只刪除了「註冊」部分,但不包含「,」和其後的所有內容。 – cimentadaj
你是否在封閉括號後加了',。+'?對我來說工作得很好 –