逗号和句点之间模式的正则表达式
regex for pattern between comma and period
经过数小时的谷歌搜索和无果而终的尝试,我希望有人可以帮助解决这个公认的简单问题(尽管我显然对正则表达式相当陌生)。
我有以下类型的数据:
name <- c("Doe, Mr. John")
我想要 "Mr",但实际标题不同。我的主要问题是如何编写正则表达式以仅捕获 "Mr" 部分,而没有其他任何内容?
我目前的做法如下:
library(stringr)
str_split(name, "[,\s.]")[[1]][[3]]
我使用提取做到的最好的是:
str_extract(name, ", .*\.")
我确定有更简单的方法,有人可以帮助我吗?
您可以匹配点之前的所有字母:
> name <- c("Doe, Mr. John")
> str_extract(name, "\p{L}+(?=\.)")
[1] "Mr"
其中 \p{L}+
匹配 1 个或多个字母,并且 (?=\.)
是一个正向前瞻,需要紧跟在它们后面。
可以使用 PCRE 正则表达式对基数 R regmatches
/ regexpr
完成同样的操作(通过将 perl=TRUE
参数传递给 regexpr
):
> regmatches(name, regexpr("\p{L}+(?=\.)", name, perl=TRUE))
[1] "Mr"
类似的正则表达式可以与 str_match
一起使用,以确保我们只匹配逗号、空格之后和点之前的单词:
> str_match(name, ",\s*(\p{L}+)\.")[,2]
[1] "Mr"
我们可以使用 sub
来自 base R
sub("^[^ ]+\s+([^.]+)\..*", '\1', name)
#[1] "Mr"
经过数小时的谷歌搜索和无果而终的尝试,我希望有人可以帮助解决这个公认的简单问题(尽管我显然对正则表达式相当陌生)。
我有以下类型的数据:
name <- c("Doe, Mr. John")
我想要 "Mr",但实际标题不同。我的主要问题是如何编写正则表达式以仅捕获 "Mr" 部分,而没有其他任何内容?
我目前的做法如下:
library(stringr)
str_split(name, "[,\s.]")[[1]][[3]]
我使用提取做到的最好的是:
str_extract(name, ", .*\.")
我确定有更简单的方法,有人可以帮助我吗?
您可以匹配点之前的所有字母:
> name <- c("Doe, Mr. John")
> str_extract(name, "\p{L}+(?=\.)")
[1] "Mr"
其中 \p{L}+
匹配 1 个或多个字母,并且 (?=\.)
是一个正向前瞻,需要紧跟在它们后面。
可以使用 PCRE 正则表达式对基数 R regmatches
/ regexpr
完成同样的操作(通过将 perl=TRUE
参数传递给 regexpr
):
> regmatches(name, regexpr("\p{L}+(?=\.)", name, perl=TRUE))
[1] "Mr"
类似的正则表达式可以与 str_match
一起使用,以确保我们只匹配逗号、空格之后和点之前的单词:
> str_match(name, ",\s*(\p{L}+)\.")[,2]
[1] "Mr"
我们可以使用 sub
来自 base R
sub("^[^ ]+\s+([^.]+)\..*", '\1', name)
#[1] "Mr"