2014-09-10 33 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"