评估R中的正则表达式

时间:2018-04-21 23:43:20

标签: r regex dplyr

我有一个与正则表达式相关的问题;这是一段代码片段:

rr <- regex("^chapter [\\divxlc]", ignore_case = T)
library(dplyr)
dd <- c("hello there", "Chapter 1", "begining of life", "end of chapter", "Chapter X", "Chapter T", "Chapter 10")

dd_df <- data_frame(line=1:length(dd), text = dd)
# dd_df now looks as follows
# A tibble: 7 x 2
  line text            
 <int> <chr>          
1     1 hello there    
2     2 Chapter 1      
3     3 begining of life
4     4 end of chapter  
5     5 Chapter X      
6     6 Chapter T      
7     7 Chapter 10 (edited)

当我根据dd_df

中的行评估正则表达式时
dd_df %>% mutate(rr = str_detect(text, rr), regexp = "^chapter [\\divxlc]")

我明白了:

# A tibble: 7 x 4


line text             rr    regexp              
 <int> <chr>            <lgl> <chr>                
1     1 hello there      FALSE "^chapter [\\divxlc]"
2     2 Chapter 1        TRUE  "^chapter [\\divxlc]"
3     3 begining of life FALSE "^chapter [\\divxlc]"
4     4 end of chapter   FALSE "^chapter [\\divxlc]"
5     5 Chapter X        TRUE  "^chapter [\\divxlc]"
6     6 Chapter T        FALSE "^chapter [\\divxlc]"
7     7 Chapter 10       TRUE  "^chapter [\\divxlc]"

我无法确定第2行和第7行如何评估TRUE

1 个答案:

答案 0 :(得分:1)

您的regex定义为:regex("^chapter [\\divxlc]", ignore_case = T)

请注意ignore_case = T。因此,"^chapter "将与第2行和第7行中的Chapter匹配。

下一部分是[\\divxlc] - 这意味着要查找digit\\d)或来自i的字符,v,{{ 1}},xl

再次在第2行和第7行c后跟Chapter匹配1。因此,这两行(\d)和2 & 7是匹配的。

其他行都不匹配这两个条件。