我有以下风格的字符串:
Random Inc
A Non-Random Inc
我想从所有字符串中删除单词Inc
,因为前面有超过1个字。以上两个例子的结果是:
Random Inc
A Non-Random
为此插入gsub
的正确的正则表达式是什么?特别是,如何在正则表达式中指定完整的单词?我以为它会是\w
,但这是一个单词字符似乎不正确。
答案 0 :(得分:3)
\w
匹配单词字符,但在这种情况下,您似乎需要考虑连字符并使用quantifier。
x <- c('Random Inc', 'A Non-Random Inc', 'Another Inc', 'A Random other Inc')
sub('[\\w-]+ [\\w-]+\\K *Inc', '', x, perl=TRUE)
# [1] "Random Inc" "A Non-Random" "Another Inc" "A Random other"
首先我们匹配单词字符的任何字符,连字符“一个或多个”次,后跟空格后跟单词字符,连字符“一次或多次”。 \K
转义序列会重置报告的匹配的起始点,并且不再包含任何以前消费的字符。然后我们匹配空白“零或更多”时间后跟单词Inc。因为我们使用\K
,我们使用空替换,因为\K
充当零宽度断言。
答案 1 :(得分:1)
答案 2 :(得分:0)
我认为你的意思是一个或多个非空格字符作为完整的单词。如果是,那么您可以使用\S+
。
> x <- c('Random Inc', 'A Non-Random Inc', 'Another Inc', 'A Random other Inc')
> sub("^\\S+(?:\\s+\\S+)?$(*SKIP)(*F)|\\s+Inc\\b", "", x, perl=T)
[1] "Random Inc" "A Non-Random" "Another Inc" "A Random other"
^\\S+(?:\\s+\\S+)?$
匹配恰好有一两个单词的行。(*SKIP)(*F)
导致匹配失败。 |
或者(即,只考虑字符串的剩余部分)\\s+Inc\\b
Matche Inc
以及之前的一个或多个空格字符。