R 正则表达式获取逗号和句点之间的字符串

R 正则表达式获取逗号和句点之间的字符串,r,regex,R,Regex,我有一根这样的绳子 Allen, Mr. William Henry 我想抓住“先生”部分 我试过这个 [,](.*?)[.] 但这抓住了“先生” 如何仅获取“Mr”部分?您可以使用regmatches和regexec使用常规TRE regex捕获Mr: > s <- "Allen, Mr. William Henry" > m <- regmatches(s, regexec(",\\s*([^.]*)", s)) > m[[1]][2] [1] "Mr"

我有一根这样的绳子

Allen, Mr. William Henry
我想抓住“先生”部分

我试过这个

[,](.*?)[.]
但这抓住了“先生”

如何仅获取“Mr”部分?

您可以使用
regmatches
regexec
使用常规TRE regex捕获
Mr

> s <- "Allen, Mr. William Henry"
> m <- regmatches(s, regexec(",\\s*([^.]*)", s))
> m[[1]][2]
[1] "Mr"
>smm[[1]][2]
[1] “先生”
图案细节

  • -逗号
  • \\s*
    -零个或多个空格
  • ([^.]*)
    -第1组捕获0多个字符,而不是

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

“姓名、头衔、名字”

那么你也可以用

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

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

我们可以使用
str\u extract

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

聪明-我从来没有使用过
regexec
-可能必须以^second开始。我提交了另一个答案,但这个答案很简洁。如果使用regexpr()而不是regexec(),这会失败,我不明白为什么。这两个函数的目的/区别是什么?
regexec()
regexpr()时保留捕获的文本
只保留匹配项。感谢大家提供的详细答案!!它们都很好用,而且还教我如何使用正则表达式。我真的需要练习和学习它。。。
library(stringr)
str_extract(s, "\\w+(?=\\.)")
#[1] "Mr"