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

标签 r regex stringr

经过数小时的谷歌搜索和无果而终的尝试,我希望有人可以帮助解决这个公认的简单问题(尽管我显然对正则表达式相当陌生)。

我有以下类型的数据:

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

我想从中得到“先生”,但实际的头衔各不相同。我的主要问题是如何编写正则表达式以仅捕获“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 个或多个字母和 (?=\\.)是一个积极的前瞻,需要紧跟在它们之后。

同样可以用 base R regmatches 来完成/regexpr使用 PCRE 正则表达式(通过将 perl=TRUE 参数传递给 regexpr ):

> regmatches(name, regexpr("\\p{L}+(?=\\.)", name, perl=TRUE))
[1] "Mr"

类似的正则表达式可以与 str_match 一起使用确保我们只匹配逗号、空格之后和点之前的单词:

> str_match(name, ",\\s*(\\p{L}+)\\.")[,2]
[1] "Mr"

关于逗号和句点之间模式的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42088577/

相关文章:

php - 正则表达式与 PDO Mysql

r - 为什么 stringr::str_detect 无法检测到我的字符串?

r - 如何迭代匹配单词序列

r - 如何将空间数据帧转换回普通数据帧?

r - 使用R来获取波动率,并使用Peak求平均值。互联网流量数据比例

objective-c - 捕获组在 NSRegularExpression 中不起作用

regex - 如何在Perl中提取字符串的一部分?

用下划线替换两个大写字母之间的空格

r - R 中的 HDBSCAN 可视化应用文本标签而不是数字

r - 如何构造多类变量的混淆矩阵