如何用R正则表达式捕获希伯来语单词עונה及后续数字?
解决R中希伯来语正则匹配空结果的问题
我之前也碰到过类似的坑,其实问题出在正则引擎的差异上——你在Regex101用的应该是PCRE引擎,但R的stringr包默认用的是ICU引擎,两者对结合RTL(从右到左)语言的正则处理有细微区别,才导致匹配返回空结果。
这里有两个简单的解决方案:
方案一:切换到PCRE引擎匹配
直接在str_extract_all里指定engine = "perl",和你在Regex101的测试环境对齐,就能正常匹配:
library(stringr) str <- "כל הילדים אוכלים, עונה 2 , פרק 8-לזניית ירקות וסלמון בדבש" exp <- "עונה(\\s+\\d+|\\d+)" str_extract_all(str, exp, engine = "perl")
运行后会返回:[[1]] [1] "עונה 2",完全符合你的预期。
方案二:调整正则适配ICU引擎
如果不想切换引擎,也可以用更兼容ICU的写法,比如用\\s*匹配任意空白字符,\\p{Digit}匹配十进制数字(覆盖更全面的数字类型):
library(stringr) str <- "כל הילדים אוכלים, עונה 2 , פרק 8-לזניית ירקות וסלמון בדבש" exp <- "עונה\\s*\\p{Digit}+" str_extract_all(str, exp)
这个写法同样能精准捕获到עונה 2。
内容的提问来源于stack exchange,提问作者ohadbh
相关产品推荐
相关产品推荐

