正则表达式在逗号和句点之间抓取字符串

时间:2017-01-05 23:26:06

标签: r regex

我有一个像这样的字符串

Allen, Mr. William Henry

我想抓住'先生'部分。

我试过这个

[,](.*?)[.]

但这抓住了'先生'

我怎样才能抓住'先生'部分?

4 个答案:

答案 0 :(得分:6)

您可以使用Mrregmatches使用常规TRE正则表达式捕获 regexec

> s <- "Allen, Mr. William Henry"
> m <- regmatches(s, regexec(",\\s*([^.]*)", s))
> m[[1]][2]
[1] "Mr"

模式详情

  • , - 逗号
  • \\s* - 零个或多个空格
  • ([^.]*) - 第1组捕获除.
  • 以外的0+个字符

请参阅regex demo

答案 1 :(得分:1)

如果数据中的每个字符串都是

形式

"NAME, TITLE. FIRSTNAME(S)

然后你也可以使用

x <- "Allen, Mr. William Henry"
gsub("(.*),\\s(.*)\\.(.*)", "\\2", x)

答案 2 :(得分:1)

或者这个

s <- "Allen, Mr. William Henry"
sub(".*,\\s{0,}(\\w+)\\..*", "\\1", s)

逻辑

.*,       any characters until comma
\\s{0,}   spaces 0 to as many
\\w+      words at least one
\\..*     period followed by any character(s)

the "\\1" keep the pattern within the parenthesis

答案 3 :(得分:0)

我们可以使用str_extract

library(stringr)
str_extract(s, "\\w+(?=\\.)")
#[1] "Mr"