使用R在句子中间捕获文本

时间:2013-10-30 09:03:03

标签: regex r

我有一个如下句子:

1字樓High Care Level

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

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

为什么1字樓仍在那里?

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

2 个答案:

答案 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"