gpt4 book ai didi

regex - 非结构化数据集(文本或 CSV 文件)中的精确模式匹配

转载 作者:行者123 更新时间:2023-12-01 06:52:01 26 4
gpt4 key购买 nike

我需要找到最好的方法来匹配 CSV 或文本文件中的符号、字母和数字的精确模式组合以及非常非结构化的数据集。

我需要准确提取模式“BR1*********”(BR1 + 恰好 9 位数字),它位于row :61: 和模式“?54***”(?54 + 恰好 3 位),它总是在 row :61: 的末尾。

这两种模式都是重复的,但具有不同的数字组合。

到目前为止,我已经尝试使用 grepgrepl 但没有成功。结果我总是收到整行,其中此模式大致匹配但符号和数字不完全匹配。

下面是数据集的一小部分:

:11:hgttu6576575?//80&&80980jhkhkhlkhkh  gjdggfjsdf?kjhkuhsfk778798978**&
:27:jhkjhuiy867tjhfsh/.>?kjklh8ggdhkotrdkhofkhodkgj
:61:kjljlkfjsdlBR1678899458iyuyugug7787?>?///uhhiuyi
jhkhkjhiy878697y8hukjlu97 ??///khiuy8oujhuhijk?54160
:11:hgggdgf79878yiuhlkhkh gjdggfhuihiuhuiou89 ioiojsdf?kjhkuhsfk778798978**&
:27:jhkjhuiy867tjhfsh/.>?kjklh8ggdhkotrdkhofkhodkgj
:61:kjljlkfjsdlBR1234885765iyuyugug7787?>?///uhhiuyi
jhkhkjhiy878697y8hukjlu97 ??///khiuy8oujhuhijk?54190

最佳答案

strapplyc在 gsubfn 包中可以用来提取这些部分。在这里我们提取整个字符串,或者如果您只想要数字部分,请在数字部分周围放置括号,例如pat1 <- "BR(1\\d{9})"

library(gsubfn)

pat1 <- "BR1\\d{9}"
pat2 <- "[?]54\\d{3}$"

strapplyc(lines, pat1, simplify = c)
## [1] "BR1678899458" "BR1234885765"

strapplyc(lines, pat2, simplify = c)
## [1] "?54160" "?54190"

或两者兼而有之:

strapplyc(lines, paste(pat1, pat2, sep = "|"), simplify = c)
## [1] "BR1678899458" "?54160" "BR1234885765" "?54190"

使用 grep如果您想要行号(即第一行是 1,第二行是 2,等等)而不是值本身,则使用相同的模式。

补充如果只有几千行,读入文件应该没有问题:

lines <- readLines("File.txt")

如果它真的太大了,你可以阅读使用 read.csv.sql在 sqldf 包中,一行代码可以读取设置一个 sqlite 数据库,将文件读入其中,然后将一部分行提取到 R 中。这里我们假设没有 ?。在文件中,但如果使用其他分隔符不在文件中:

library(sqldf)

lines <- read.csv.sql("File.txt", header = FALSE, sep = "?",
sql = "select * from file where V1 like '%BR1%' or V1 like '%54%'")
# now use strapplyc as above

关于regex - 非结构化数据集(文本或 CSV 文件)中的精确模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26563866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com