R搜索特定的字符串模式(第2部分)

时间:2019-02-07 01:48:44

标签: r regex

我这里列出了上一个问题(Searching for specific string pattern),但是还有其他一些问题。

以前,我认为我的文件命名约定仅是以下格式:

return reports.stream()
    .map(report -> {
        String oldReportId = report.getOldId();
        Map<String, Set<EServiceReport>> eServiceReportsMapByBatchFile = // processing of batch files
        ...
        // I don't know how and what to return here
    }).collect(// I don't know what to do here);

或者具体地说,它是季度,后跟“-” 然后是年份

但是,在进一步调查后,文件还有其他变体,例如:

"aaaaa-ttttt-eeee-q4-2015-file"
"aaaaaa-fffff-3333-q2-2012-file"

类似地,我想提取季度,但是我不确定是否有可以编写的通用代码可以一次提取所有内容,还是我必须编写几组代码并逐行运行它们。对R中的子功能不是很熟悉,如果有人可以将我指向一个包含详细说明和示例的网站,让我编写自己的代码以提取这些信息,我将不胜感激。

最终,代码应解析所有这些字符串,并输出如下内容: year = 2005 quarter = q4 等。

1 个答案:

答案 0 :(得分:1)

尝试使用regexpr来显示比赛的位置,并使用regmatches来返回比赛的位置,这很容易导致提取不正确的数据。对于四分之一,它将返回1-4之前或之后带有q的任何1-4实例。如果有任何其他信息可以使这些匹配项比我建议的更具体。

input=c("aaaaaa-f2q09-bbbbb",
"aaaaaa-f2q2008-bbbbb",
"aaaaaa-f4q-2008-fffff",
"f4q-aaaaa-eeeeee-2008",
"q2-aaaaaaaaa-eeeeeee-2005",
"aaaaaaaa-3q-2008-rrrrrrr")


quarter=regmatches(input, regexpr("[1-4]q|q[1-4]", input))
year = regmatches(input, regexpr("q\\d{4}|q\\d{2}|\\d{4}", input))
year = gsub("q","",year)
year = sub("\\b(\\d{2})\\b","20\\1", year)

年份匹配也存在很多问题,因为您可能会使用三种不同的格式“ q09”,“ q2008”,“ 2008”。因为该函数返回字符串中的第一个匹配项,所以需要q \ d {4}来拉回q2008示例。

我的sub函数在此表示将正则表达式与20以及匹配的表达式本身进行匹配,\\1返回括号中的内容(\\d{2})

测试并评论任何错误