4

我有如下一句话:

1字樓High Care Level

我想提取术语“High Care Level”,所以我使用以下脚本:

> gsub("([A-Z][a-z]+ Care Level).*","\\1","1字樓High Care Level")
[1] "1字樓High Care Level"

为什么1字樓还在?

备注:1字樓是一些中文短语

4

2 回答 2

2

1字樓仍然存在,因为您不匹配它,因此您不替换它。

您需要匹配字符串的第一部分,然后将替换文本放在反向引用中(正如您所做的那样)。您可以通过将表达式锚定在字符串开头^并可选地捕获任意数量的任意字符来完成这项工作,但是任何与此相邻的大写或小写字母都Care Level将匹配为反向引用 1,然后是其余的的字符串匹配。您仅将整个字符串替换为反向引用 1 中匹配的内容...

gsub("^.*([A-Z][a-z]+ Care Level).*","\\1","1字樓High Care Level")
#[1] "High Care Level"
于 2013-10-30T09:31:24.400 回答
0

您可以使用相同的正则表达式gregexpr

xx <- "1字樓High Care Level")
regmatches(xx,gregexpr("[A-Z][a-z]+ Care Level",xx))
[[1]]
[1] "High Care Level"
于 2013-10-30T10:31:42.347 回答