在R语言中如何从正则表达式生成所有可能的字符串组合?
问题
需要从正则表达式"(ost|west)europäisch($|e($|r|s|n|m))"(注:原正则中的*$应为笔误,实际应为$)生成如下格式的字符串向量:
[1] "osteuropäisch" "westeuropäisch" "osteuropäische" "westeuropäische" [5] "osteuropäischer" "westeuropäischer" "osteuropäisches" "westeuropäisches" [9] "osteuropäischen" "westeuropäischen" "osteuropäischem" "westeuropäischem"
目前可通过手动构造expand.grid实现单个正则的组合生成,但因存在大量不同正则表达式需处理,希望找到R语言中可将正则表达式直接转换为所有可能字符串组合的工具(类似Python的exrex模块),已排查base、stringi、stringr未找到相关功能。
解决方案
使用regenerator包
这是R中专门用于解析正则表达式并生成所有匹配字符串的工具,功能和Python的exrex高度相似。
- 安装并加载包:
install.packages("regenerator") library(regenerator)
- 生成目标字符串组合:
# 修正后的正则表达式(修正原正则中无意义的*$为$) target_regex <- "(ost|west)europäisch($|e($|r|s|n|m))" # 生成所有可能的匹配字符串 result <- generate_all(target_regex) # 输出结果 result
执行后会直接生成符合要求的字符串向量,该包支持分支(|)、分组()、可选匹配等常见正则语法,适合批量处理不同正则表达式。
自定义解析逻辑(无额外包依赖)
如果不想安装第三方包,可基于rex包解析正则结构,再结合expand.grid或purrr实现组合生成,但这种方式需要针对不同正则语法编写适配逻辑,灵活性不如regenerator,仅适合简单正则场景。
内容的提问来源于stack exchange,提问作者xyz
相关产品推荐
相关产品推荐

