Regex R:使用POSIX正则表达式从字符串中提取数据

Regex R:使用POSIX正则表达式从字符串中提取数据,regex,r,string,Regex,R,String,如何使用POSIX样式的正则表达式从该字符串中仅提取数据库名称 st <- "MICROSOFT_SQL_SERVER.DATABASE\INSTANCE.DATABASE_NAME." 我在想 sub(".*\\.", st, "") 第一个问题是您需要转义字符串中的\: st <- "MICROSOFT_SQL_SERVER.DATABASE\\INSTANCE.DATABASE_NAME." 但更简单的解决方案是在\\.上拆分并选择最后一个块: > strsplit

如何使用POSIX样式的正则表达式从该字符串中仅提取数据库名称

st <- "MICROSOFT_SQL_SERVER.DATABASE\INSTANCE.DATABASE_NAME."
我在想

sub(".*\\.", st, "")

第一个问题是您需要转义字符串中的
\

st <- "MICROSOFT_SQL_SERVER.DATABASE\\INSTANCE.DATABASE_NAME."
但更简单的解决方案是在
\\.
上拆分并选择最后一个块:

> strsplit(st, "\\.")[[1]][3]
[1] "DATABASE_NAME"
或者稍微自动化一点

> sst <- strsplit(st, "\\.")[[1]]
> tail(sst, 1)
[1] "DATABASE_NAME"
>sst尾部(sst,1)
[1] “数据库名称”

另一种方法是在包
stringr
中使用
stru-split
。想法是在每个周期将st拆分为字符串,然后分离第三个字符串:

st <- "MICROSOFT_SQL_SERVER.DATABASE\\INSTANCE.DATABASE_NAME."

library(stringr)

str_split(st, "\\.")[[1]][3]

[1] "DATABASE_NAME"

st其他答案提供了一些非常好的替代方法,可以使用
strsplit
stru-split
解决问题

但是,如果您真的想使用正则表达式和
gsub
,此解决方案会将前两次出现的(字符串后跟句点)替换为空字符串

注意使用
修饰符告诉正则表达式不要贪婪,以及使用
{2}
修饰符告诉它重复括号中的表达式两次

gsub("\\.", "", gsub("(.+?\\.){2}", "", st)) 
[1] "DATABASE_NAME"

相反,您可以对第二个和第三个点(.)进行索引,然后对其进行子串以获取数据库名称……还值得指出的是,您的Q中的第二个和第三个参数是错误的。它是
sub(模式、替换、字符串)
+1表示字符串拆分的想法-在与该regexp进行斗争后,我们也在考虑类似的基本R解决方案。
st <- "MICROSOFT_SQL_SERVER.DATABASE\\INSTANCE.DATABASE_NAME."

library(stringr)

str_split(st, "\\.")[[1]][3]

[1] "DATABASE_NAME"
gsub("\\.", "", gsub("(.+?\\.){2}", "", st)) 
[1] "DATABASE_NAME"