在r中使用反向引用的正则表达式



我在https://regex101.com/r/R8ObNk/1(^[^\]*)\t([^\]*)\t([^\]*)\t([^\]*)\t([^\]*)(.*)中写了一个反向引用来捕获第5组或"5"

由于某种原因,当我尝试使用上面我在R中使用gsub编写的正则表达式时,我没有返回正确的数据。

这是dput第一行的数据,我想引用:

structure(list(value = "19-22tt4tP,GtDOB_TTttTime of Birthtt126t t0000-2359 Time of Birth"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -1L))

这是上面一行中的gsub:gsub(pattern = "(^[^\]*)\t([^\]*)\t([^\]*)\t([^\]*)\t([^\]*)(.*)", replacement = "\5", x = a$value)。我只知道你应该再加一个""当在R中使用正则表达式时,但仍然不起作用。

的预期结果gsub应该"DOB_TT"或者第5个捕获组

在这种情况下实际上不需要正则表达式,因为您的数据是结构化的:

parsed <- read.delim(text=a$value, header=FALSE)
parsed$V5
# [1] "DOB_TT"

您需要小心转义字符。注意R使用了额外的"网站无法理解的字符串。当你看到像

这样的字符串
x <- "atb"

在R中,字符串中没有斜杠。t是制表符的转义符。所以nchar(x)返回3,而不是4,因为这两个值合在一起构成一个制表符。给定你的数据,你真正想要的是

gsub(pattern = "(^[^t]*)t([^t]*)t([^t]*)t([^t]*)t([^t]*)(.*)",
replacement = "\5", x = a$value)

制表符不需要额外的,因为制表符在正则表达式中并不特殊。它们只是普通的字符。

相关内容

  • 没有找到相关文章

最新更新