经过几个小时的谷歌搜索和毫无结果的尝试,我希望有人可以帮助解决这个容易出错的问题(尽管显然我对这个问题很不熟悉)。
我有以下类型的数据:
SubItems = new ObeservableCollection<object>() { "" }
我希望&#34; Mr&#34;从这个,但实际的标题各不相同。我的主要问题是如何编写正则表达式以便仅仅捕获&#34; Mr&#34;部分,没有别的?
我目前的做法如下:
name <- c("Doe, Mr. John")
我使用提取设法做的最好的是:
library(stringr)
str_split(name, "[,\\s.]")[[1]][[3]]
我确定这是一种更简单的方式,有人可以帮助我吗?
答案 0 :(得分:5)
您可以匹配点之前的所有字母:
> name <- c("Doe, Mr. John")
> str_extract(name, "\\p{L}+(?=\\.)")
[1] "Mr"
其中\\p{L}+
匹配1个或多个字母,而(?=\\.)
是一个积极的前瞻,后面需要一个点。
使用PCRE正则表达式(通过将regmatches
参数传递给regexpr
),基本R perl=TRUE
/ regexpr
也可以这样做:
> regmatches(name, regexpr("\\p{L}+(?=\\.)", name, perl=TRUE))
[1] "Mr"
类似的正则表达式可以与str_match
一起使用,以确保我们只匹配逗号,空格之后和点之前的单词:
> str_match(name, ",\\s*(\\p{L}+)\\.")[,2]
[1] "Mr"
答案 1 :(得分:1)
我们可以使用sub
base R
sub("^[^ ]+\\s+([^.]+)\\..*", '\\1', name)
#[1] "Mr"