逗号和句点之间的模式的正则表达式

时间:2017-02-07 11:22:15

标签: r regex stringr

经过几个小时的谷歌搜索和毫无结果的尝试,我希望有人可以帮助解决这个容易出错的问题(尽管显然我对这个问题很不熟悉)。

我有以下类型的数据:

SubItems = new ObeservableCollection<object>() { "" }

我希望&#34; Mr&#34;从这个,但实际的标题各不相同。我的主要问题是如何编写正则表达式以便仅仅捕获&#34; Mr&#34;部分,没有别的?

我目前的做法如下:

name <- c("Doe, Mr. John")

我使用提取设法做的最好的是:

library(stringr)
str_split(name, "[,\\s.]")[[1]][[3]]

我确定这是一种更简单的方式,有人可以帮助我吗?

2 个答案:

答案 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"