我在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)
制表符不需要额外的,因为制表符在正则表达式中并不特殊。它们只是普通的字符。