You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言正则表达式评估咨询:附代码片段

评估R语言中正则表达式的匹配效果

咱们先拆解一下你写的这个正则表达式,搞清楚它到底在匹配什么:

rr <- regex("^chapter [\\divxlc]", ignore_case = T)
  • ^:锚定字符串的开头,也就是说只有当"chapter "出现在字符串最前面时才会匹配
  • chapter :匹配"chapter"加上一个空格,ignore_case = T参数让匹配不区分大小写,所以Chapter、CHAPTER、cHaPtEr这些写法都能被匹配到
  • [\\divxlc]:这是一个字符集合,匹配其中任意单个字符:
    • \\d:代表任意数字(0-9)
    • i、v、x、l、c:对应罗马数字的单个字符(分别代表1、5、10、50、100),同样因为忽略大小写,I、V、X等大写形式也能匹配

接下来咱们用代码实际评估它的匹配效果,结合你提供的数据框,我们可以添加列来标记是否匹配,以及提取具体匹配的部分:

# 加载需要的包
library(stringr)
library(dplyr)

# 你的原代码
rr <- regex("^chapter [\\divxlc]", ignore_case = T)
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 <- dd_df %>%
  mutate(
    是否匹配 = str_detect(text, rr),  # 检测是否存在匹配
    匹配内容 = str_extract(text, rr)  # 提取具体匹配的部分
  )

# 查看结果
print(dd_df)

运行这段代码后,你会得到这样的结果:

# A tibble: 7 × 4
   line text             是否匹配 匹配内容  
  <int> <chr>            <lgl>    <chr>     
1     1 hello there      FALSE    NA        
2     2 Chapter 1        TRUE     Chapter 1 
3     3 begining of life FALSE    NA        
4     4 end of chapter   FALSE    NA        
5     5 Chapter X        TRUE     Chapter X 
6     6 Chapter T        FALSE    NA        
7     7 Chapter 10       TRUE     Chapter 1 

咱们来逐个分析每一行的匹配情况:

  • 第1行:hello there → 不匹配,因为字符串开头不是"chapter "
  • 第2行:Chapter 1 → 匹配,1属于数字集合,匹配完整的Chapter 1
  • 第3行:begining of life → 不匹配,和开头的锚定条件不符
  • 第4行:end of chapter → 不匹配,虽然有"chapter"但不在字符串开头
  • 第5行:Chapter X → 匹配,X属于字符集合里的x(忽略大小写),匹配完整的Chapter X
  • 第6行:Chapter T → 不匹配,T不在[\divxlc]这个字符集合里
  • 第7行:Chapter 10 → 注意这里,正则只匹配到Chapter 1,因为[\divxlc]只能匹配单个字符,所以虽然整个字符串开头符合,但只提取了第一个数字。如果你的需求是匹配多位数字或者完整的罗马数字,这个正则就需要调整啦~

内容的提问来源于stack exchange,提问作者Mutaz-MSFT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:47:51