无法通过正则表达式查找字符串后跟变量空格和R中的数字

时间:2017-09-12 19:20:30

标签: r regex

我试图使用一些正则表达式来查找一系列文档中的行,以便我可以准确地对信息进行子集化。首先,一些样本数据。

text <- c("BAR                  02/      BLAHBLAH                                                 ",
      "                       27/      LOCATION: BLAH-TOWN",
      "                      2013      BLAH;BLAH",
      " BAR         09/       10/      BOOHAABLAH                 ",
      "             25/       14/      LOREM IPSUM,                        ",
      "             2014      2014     LOREM LORE LOT",
      " BAR         BLAH MUH BLAH NO BLAH")    

我试图找到列表的元素,其中BAR仅由数字跟随。空白的数量是可变的,但我有兴趣捕获的行总是后跟数字。我正在使用基本R grep()函数并尝试了大量的函数。到目前为止,我发现没有积极的前瞻配置似乎赶上了吗?

到目前为止我尝试过的一些事情。

grep("(BAR\\b(?=\\s*[0-9]))", text, perl= T)

grep("(BAR\\b(?=\\s*\\b[0-9]))", text, perl= T)

grep("(BAR\\b\\s*\\d\\d\/)", text, perl = T)

grep("BAR\\s*[0-9]",text,perl=T)

grep("BAR\\s*(?![^A-Za-z])",text,perl=T)

我哪里错了?我听说过有关tidyr的一些内容,但我所读过的内容都没有显示出比grep更多的承诺。

1 个答案:

答案 0 :(得分:1)

我将根据your feedback提供答案。您可以通过将BAR更改为VIOL并将将Unicode空格更改为字符串来修改字符向量。

因此,以下情况适用于您的情况:

grep("(*UCP)VIOL\\s+[0-9]", text, perl=TRUE)

(*UCP) PCRE动词将\s匹配任何Unicode空格。

在其他环境中(这不是你的情况),TRE(默认的基础R正则表达式引擎)POSIX字符类是Unicode识别的,也可以使用

grep("VIOL[[:space:]]+[0-9]", text)