【发布时间】:2017-02-14 14:41:39
【问题描述】:
我有一个文本文件,正在尝试提取模式。在 perl 中,我使用 $1 进行匹配,如 What does $1 mean in Perl?
我想知道 R 是否有类似的功能。这是我的意思的示例
a=readLines('xxx.txt')
"{1:F21CRESUS33XLIQ9590112170}{2:O1030747170228BNPAGB22XCIT95901121701702280629U}{3:{103:GLBH}}{4"
[914] ":20:PK836J9GD2HI7SWQ"
[915] ":23B:CRED"
[916] ":32A:170214USD2154,252"
[917] "50:ABNYUS33XXXX"
[918] "/1Jose Lugo"
[919] "/2931 Corte De Luna"
[920] "/3 Seattle"
[921] "/498104, United States"
[922] "59F:BPAHCUHHXXXX"
[923] "/1 Jossef Goldberg"
[924] "/21220 Bradford Way"
[925] "/3 Seattle"
[926] "/498104, United States"
[927] ":71A:OUR"
[928] "-}"
[929] "{1:L01BARCGB21X05G7115765182}{2:O1030946170226ABBYGB2LXXXX71157651821702261046S}{3:{103:WJHX}}{4"
[930] ":20:YZDSKFJNXV4BE3MP"
[931] ":23B:CRED"
[932] ":32A:170214USD63362,31"
[933] "50:ABBYGB2LXXXX"
[934] "/1Jossef Goldberg"
[935] "/21220 Bradford Way"
[936] "/3 Seattle"
我想做的是测试一个条件,如果该行带有特定字符,然后搜索该行以查看它是否包含另一个模式,并将它们 $pull$ 出来(如在 perl 中)。
在伪代码中:
pattern1='^{1:'
pattern2='CU'
if (!is.null(line)){
if(grep(pattern1, line)){
if(grep(pattern2,line)){ print(substr(line,a,b), plus some other patters if they match the regex)
}
}
}
我也想知道如何启动它以开始阅读这些行
【问题讨论】:
-
可能是
x <- paste0(a, collapse = "\n"),然后是regmatches(x, gregexpr("(?sm:^{1.*?CU)(?-s:.*)", x, perl=TRUE))? -
这不是一个真正的
perl问题,是吗? -
适用于 Wiktor。 ?sm: 和 ?s: 在 gregexpr 中代表什么?谢谢
-
请参阅
?regex了解 R 中的正则表达式的概述。
标签: r regex pattern-matching