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"