假设我运行以下
txt <- "client:A, field:foo, category:bar"
grep("field:[A-z]+", txt, value = TRUE, perl = TRUE)
根据regexr.com我预计会得到field:foo
,但我会得到整个字符串。这是为什么?
答案 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
来匹配任何字母。