如何在R中精确匹配正则表达式并拉出模式

时间:2016-08-23 10:49:48

标签: regex r

我想从我的字符串向量中获取模式

string <- c(
  "P10000101 - Przychody netto ze sprzedazy produktów" ,                    
  "P10000102_PL - Przychody nettozy uslug",                     
  "P1000010201_PL - Handlowych, marketingowych, szkoleniowych",             
  "P100001020101 - - Handlowych,, szkoleniowych - refaktury",
  "- Handlowych, marketingowych,P100001020102, - pozostale"
)

结果我希望得到正则表达式的完全匹配

result <- c(
  "P10000101",
  "P10000102_PL",
  "P1000010201_PL",
  "P100001020101",
  "P100001020102"
)

我尝试使用此pattern = "([PLA]\\d+)"value = T, fixed = T, perl = T.

的不同组合
grep(x = string, pattern = "([PLA]\\d+(_PL)?)", fixed = T)

1 个答案:

答案 0 :(得分:6)

我们可以尝试str_extract

library(stringr)
str_extract(string, "P\\d+(_[A-Z]+)*")
#[1] "P10000101"      "P10000102_PL"   "P1000010201_PL" "P100001020101"  "P100001020102" 

grep用于查找匹配模式是否存在于特定字符串中。要进行提取,请使用subgregexpr/regmatchesstr_extract

使用base Rregexpr/regmatches

regmatches(string, regexpr("P\\d+(_[A-Z]+)*", string))
#[1] "P10000101"      "P10000102_PL"   "P1000010201_PL" "P100001020101"  "P100001020102" 

基本上,要匹配的模式是P后跟一个数字(\\d+),然后是*的贪婪(_)匹配和一个或多个大写字母。