正则表达式 – 使用R在句子中间捕获文本

我有一个如下句子:

1字楼高级护理等级

我想提取术语“高级护理级别”,所以我使用以下脚本:

> 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"
点赞