2014-09-10 31 views
2

我將如何編寫一個正則表達式來抓取位於任何後續字符處的大寫字母直到空格爲止?直到下一個空間的條件的正則表達式

輸入: cake pietypeAPPLE CRUMBLE tart toastTexas price

例如,我要搶「蘋果」,儘管它沒有被前面有一個空格。我想要「CRUMBLE」。即使不是所有的組件都是大寫的,我也想要「德克薩斯」。

我會用gsub(pattern, replacement = "", x = string)得到以下輸出

輸出: cake pietype tart toast price

謝謝!

回答

5

您可以使用regmatches來提取這些子字符串。

> x <- 'cake pietypeAPPLE CRUMBLE tart toastTexas price' 
> regmatches(x, gregexpr('[A-Z]\\S+', x))[[1]] 
# [1] "APPLE" "CRUMBLE" "Texas" 

或者,如果你想嚴格匹配字母字符只。

> regmatches(x, gregexpr('[A-Z][A-Za-z]+', x))[[1]] 

如果你想替換它們,我會使用下面的內容來避免單詞之間剩餘的空間。

> gsub('[A-Z][A-Za-z]+([A-Z][A-Za-z]+)*', '', x) 
# [1] "cake pietype tart toast price" 
+0

合作。 'S'是空間? – Vlo 2014-09-10 19:50:18

+0

'\ S'匹配任何非空白,'\ s'匹配空格 – hwnd 2014-09-10 19:51:53

0

下面是一個使用qdapRegex包的方法:

x <- 'cake pietypeAPPLE CRUMBLE tart toastTexas price' 

library(qdapRegex) 
rm_default(x, pattern="[A-Z][A-Za-z]*") 

## [1] "cake pietype tart toast price" 

如果要提取這些條款:

rm_default(x, pattern="[A-Z][A-Za-z]*", extract=TRUE) 

## [[1]] 
## [1] "APPLE" "CRUMBLE" "Texas"