Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 逗号和句点之间的模式的正则表达式_R_Regex_Stringr - Fatal编程技术网

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

R 逗号和句点之间的模式的正则表达式,r,regex,stringr,R,Regex,Stringr,经过数小时的谷歌搜索和徒劳的尝试,我希望有人能帮助解决这个公认的简单问题(尽管我显然对regexp相当陌生) 我有以下类型的数据: name <- c("Doe, Mr. John") 我用提取法做的最好的事情是: str_extract(name, ", .*\\.") 我相信有一个更简单的方法,有人能帮我吗?您可以将所有字母匹配到一个点之前: > name <- c("Doe, Mr. John") > str_extract(name, "\\p{L}+(?=\

经过数小时的谷歌搜索和徒劳的尝试,我希望有人能帮助解决这个公认的简单问题(尽管我显然对regexp相当陌生)

我有以下类型的数据:

name <- c("Doe, Mr. John")
我用提取法做的最好的事情是:

str_extract(name, ", .*\\.")

我相信有一个更简单的方法,有人能帮我吗?

您可以将所有字母匹配到一个点之前:

> name <- c("Doe, Mr. John")
> str_extract(name, "\\p{L}+(?=\\.)")
[1] "Mr"
> str_match(name, ",\\s*(\\p{L}+)\\.")[,2]
[1] "Mr"
类似的正则表达式可与
str_match
一起使用,以确保我们只匹配逗号后、空格和点前的单词:

> name <- c("Doe, Mr. John")
> str_extract(name, "\\p{L}+(?=\\.)")
[1] "Mr"
> str_match(name, ",\\s*(\\p{L}+)\\.")[,2]
[1] "Mr"

我们可以使用
sub
from
base R

sub("^[^ ]+\\s+([^.]+)\\..*", '\\1', name)
#[1] "Mr"

这看起来很漂亮!谢谢。一个快速但相关的问题:我如何强制“,”成为一个“角色”(团体?)?例如,当我使用str_split函数时,我的初衷是在“,”(即包括空格)和“.”处拆分字符串。但我写它的方式被解释为“逗号、点和空格分割”。也许,你的意思是你实际上想要
stru分割(名称,“[,.]\\s*”[[1]][2]
?字符类
[,.]
与当前位置的
匹配。顺便说一句,
\p{L}
可以替换为
[:alpha:]
。如果你只需要支持ASCII字母,而不是
\p{L}
,你可以使用一个通用的
[a-Za-z]
字符类。是的,这正是我想要的!谢谢你的帮助!