我有如下一句话:
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字樓
是一些中文短语
1字樓
仍然存在,因为您不匹配它,因此您不替换它。
您需要匹配字符串的第一部分,然后将替换文本放在反向引用中(正如您所做的那样)。您可以通过将表达式锚定在字符串开头^
并可选地捕获任意数量的任意字符来完成这项工作,但是任何与此相邻的大写或小写字母都Care Level
将匹配为反向引用 1,然后是其余的的字符串匹配。您仅将整个字符串替换为反向引用 1 中匹配的内容...
gsub("^.*([A-Z][a-z]+ Care Level).*","\\1","1字樓High Care Level")
#[1] "High Care Level"
您可以使用相同的正则表达式gregexpr
:
xx <- "1字樓High Care Level")
regmatches(xx,gregexpr("[A-Z][a-z]+ Care Level",xx))
[[1]]
[1] "High Care Level"