R的正则表达式前瞻性

时间:2013-01-03 15:34:49

标签: regex r

我正在尝试使用正则表达式使用stringr包来提取一些文本。出于某种原因,我得到了'无效的正则表达式'错误。我在一些网站测试工具中尝试了正则表达式,它似乎在那里工作。我想知道是否有一些关于regex如何在R中工作的独特之处,特别是在stringr包中。

以下是一个例子:

string <- c("MARKETING:  Vice President", "FINANCE:  Accountant I",
"OPERATIONS: Plant Manager")

pattern <- "[A-Z]+(?=:)"
test <- gsub(" ","",string)
results <- str_extract(test, pattern)

这似乎不起作用。我想在其中没有“:”的情况下获得“营销”,“财务”和“运营”。这就是我使用前瞻语法的原因。我意识到我可以使用以下方法解决这个问题:

pattern <- "[A-Z]+(:)"
test <- gsub(" ","",string)
results <- gsub(":","",str_extract(test, pattern))

但我预计在不久的将来,我可能需要使用外观来处理比这更复杂的情况。

我是否需要通过一些转义修改正则表达式才能使其正常工作?

2 个答案:

答案 0 :(得分:6)

Lookahead断言要求您将正则表达式标识为R中的perl正则表达式。

str_extract(string, perl(pattern))
# [1] "MARKETING"  "FINANCE"    "OPERATIONS"

您也可以在R:

中轻松完成此操作
regmatches(string, regexpr(pattern, string, perl=TRUE))
# [1] "MARKETING"  "FINANCE"    "OPERATIONS"

regexpr找到匹配项,regmatches使用匹配数据提取子字符串。

答案 1 :(得分:2)

您可以直接使用sub并进行分组。

sub('^([A-Z]+):.*$', '\\1', string)

# [1] "MARKETING"  "FINANCE"    "OPERATIONS"

我将小组修改到一行的开头,寻找一个或多个大写字母并保存它们。它们后面必须跟冒号:,然后是零个或多个附加字符。

相关问题