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

标签 regex r string

如何使用 POSIX 样式正则表达式从此字符串中仅提取 DATABASE_NAME?

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

首先,这会产生一个错误

Error: '\I' is an unrecognized escape in character string starting "MICROSOFT_SQL_SERVER.DATABASE\I"

我在想类似的事情

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

最佳答案

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

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

至于主要问题,这将从您给出的字符串中返回您想要的位:

> sub("\\.$", "", sub("[A-Za-z0-9\\._]*\\\\[A-Za-z]*\\.", "", st))
[1] "DATABASE_NAME"

但更简单的解决方案是拆分 \\. 并选择最后一个 block :

> strsplit(st, "\\.")[[1]][3]
[1] "DATABASE_NAME"

或者稍微自动化一点

> sst <- strsplit(st, "\\.")[[1]]
> tail(sst, 1)
[1] "DATABASE_NAME"

关于regex - R:使用 POSIX 正则表达式从字符串中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5685810/

相关文章:

Python,从子列表中删除所有数字

c# - 有效函数名称的正则表达式 ([a-zA-Z]\w+)[^\w]

java - 如何将从 TextField View 中获取的 String 转换为 int

regex - 使用 Cloudant 中的 View 进行无大小写匹配

r - 检查传递的参数是否存在

r - 基于str_detect对列进行分类

r - 计算子字符串中特定字符的数量

java - 将用户输入与字符串进行比较

Javascript:像这样准确地拆分字符串:/kick @Username "reason"但是用户名可以有特殊字符

regex - 为什么使用scala,使用相同的正则表达式,使用2种不同的匹配方法会导致2种​​不同的结果?