我有一个如下句子:
1字樓High Care Level
我想提取术语“高级护理级别”,因此我使用以下脚本:
> gsub("([A-Z][a-z]+ Care Level).*","\\1","1字樓High Care Level")
[1] "1字樓High Care Level"
为什么1字樓
仍在那里?
备注:1字樓
是一些中文短语
答案 0 :(得分:2)
1字樓
仍然存在,因为您不匹配它,因此您不会替换它。
您需要匹配字符串的第一部分,然后将替换文本放在后引用中(就像您所做的那样)。您可以通过使用^
将表达式锚定在字符串的开头并任何 任意的任何来生成这项工作>字符,但与Care Level
连续的任何大写或小写字母将与后引用1匹配,然后匹配其余字符串。您只能将整个字符串替换为后引用1 ...
gsub("^.*([A-Z][a-z]+ Care Level).*","\\1","1字樓High Care Level")
#[1] "High Care Level"
答案 1 :(得分:0)
您可以使用与gregexpr
相同的正则表达式:
xx <- "1字樓High Care Level")
regmatches(xx,gregexpr("[A-Z][a-z]+ Care Level",xx))
[[1]]
[1] "High Care Level"