R-正则表达式,第二或第三次出现后匹配

时间:2018-10-30 19:58:25

标签: r regex match

我有一个字符串向量:
x <- c( "\nFolsom Field, University of Colorado, Boulder, CO (9/3/72)", "\nHollywood Palladium, Hollywood, CA (9/9/72)" )

我想提取事件的位置,城市,州和日期。我已经弄清楚了事件的位置,城市和日期,但不能正确匹配状态-我遇到的问题是我需要在第二个或第三个逗号之后和第一个括号之前进行匹配。

我尝试过: stateLoc <- regexpr(",{2,}.+?\\(", x) state <- regmatches(x, stateLoc),但返回的字符向量为空。

感谢您的任何投入,谢谢。

2 个答案:

答案 0 :(得分:1)

此正则表达式为我工作

use std::fmt::Write;
let mut example = String::new();
let s: &std::fmt::Display = if 1 + 1 == 2 { &"string" } else { &'c' };
write!(&mut example, "{}", s).unwrap();

答案 1 :(得分:1)

您可以使用单个str_match调用来提取这些详细信息:

library(stringr)
x <- c("\nFolsom Field, University of Colorado, Boulder, CO (9/3/72)","\nHollywood Palladium, Hollywood, CA (9/9/72)")
> res <- str_match(x, "\\s*([^,]*),\\s*([A-Z]+)\\s*\\(([0-9/]+)\\)")
> res[,2]
[1] "Boulder"   "Hollywood"
> res[,3]
[1] "CO" "CA"
> res[,4]
[1] "9/3/72" "9/9/72"

请参见regex demo online

详细信息

  • \\s*-超过0个空格
  • ([^,]*)-捕获组1:除逗号以外的任何0个或多个字符
  • ,-逗号
  • \\s*-超过0个空格
  • ([A-Z]+)-捕获第2组:1个或更多大写字母
  • \\s*-超过0个空格
  • \\(-一个(字符
  • ([0-9/]+)-捕获第3组:1个或多个数字或斜杠
  • \\)-一个)字符。