有没有办法表明我想要匹配的字符串的开始和结束

时间:2017-02-15 06:42:46

标签: r regex

我正在尝试匹配确切的文字。在下面的代码中,我尝试使用/ b 2016 / b来分割2016年后的空格,但这与0,1,2或6相匹配。我以哪种方式指示字符串I的开头和结尾我想在下面的代码中进行匹配,以便strsplit仅在2016年的两个代码之后进行分组。感谢

x <- "January 2016 February 2016     411,236    410,236     gold   54  end 6  only"

strsplit(x, "(?<=[/b2016/b])\\s+", perl = TRUE)
[[1]]
[1] "January 2016"     "February 2016"    "411,236"         
[4] "410,236"          "gold   54  end 6" "only" 

3 个答案:

答案 0 :(得分:2)

忽略括号:

strsplit(x, "(?<=2016)\\s+", perl = TRUE)

答案 1 :(得分:1)

我们可以使用str_extract仅提取4位数字

library(stringr)
str_extract_all(x, "\\b[0-9]{4}\\b")[[1]]

或者更确切地说

str_extract_all(x, "(?<=[A-Za-z]{1,8}\\s)\\b[0-9]{4}\\b")[[1]]
#[1] "2016" "2016"

答案 2 :(得分:0)

您可以更好地使用gsub功能来实现目标:

gsub("2016", "2 0 1 6",x)

将一个字符序列替换为另一个字符序列。结果是:

[1] "January 2 0 1 6 February 2 0 1 6     411,236    410,236     gold   54  end 6  only"