匹配R正则表达式

时间:2017-08-21 12:09:28

标签: r regex

假设我运行以下

txt <- "client:A, field:foo, category:bar"
grep("field:[A-z]+", txt, value = TRUE, perl = TRUE)

根据regexr.com我预计会得到field:foo,但我会得到整个字符串。这是为什么?

1 个答案:

答案 0 :(得分:4)

您似乎想要提取值。使用regmatches

txt <- "client:A, field:foo, category:bar"
regmatches(txt, regexpr("field:[[:alpha:]]+", txt))
# => [1] "field:foo"

请参阅R demo

要匹配多个匹配项,请将regexpr替换为gregexpr

或使用 stringr str_extract_all

library(stringr)
str_extract_all(text, "field:[a-zA-Z]+")

另一点是[A-z] matches more than ASCII letters。在TRE([[:alpha:]] / regexpr没有gregexpr)/ ICU(stringr)正则表达式中使用perl=TRUE来匹配任何字母。