我有一个文本文件,我正在尝试提取模式。在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"
我想要做的是测试一个条件,如果该行有一个特定字符,然后搜索该行以查看它是否包含另一个模式,并将$拉出来(如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)
}
}
}
我也想知道如何让它开始阅读
答案 0 :(得分:2)
首先,我建议加入\n
:
x <- paste0(a, collapse = "\n")
然后你可以用
抓住你的比赛regmatches(x, gregexpr("(?sm:^{1.*?CU)(?-s:.*)", x, perl=TRUE))
(?sm:^{1.*?CU)(?-s:.*)
是匹配的正则表达式模式:
(?sm:^{1.*?CU)
- 行的开头(^
将匹配行开头位置,?m
启用此行为),然后{1
文字字符序列,然后{{1} }将匹配任何0+字符(因为.*?
使(?s)
匹配包括换行符的任何符号)尽可能少(因为.
是一个惰性量词)直到第一个{ {1}} *?
- CU
将与该行的其余部分匹配((?-s:.*)
组关闭之前由.*
启用的DOTALL修饰符。)