R语言正则表达式字符组内\d无法匹配数字问题求解
问题原因解答
你写的[\\div]无法匹配阿拉伯数字的核心原因是R默认使用的POSIX扩展正则表达式引擎,不支持在字符组[]内识别\\d这类简写元字符:
- 在R的默认正则解析逻辑中,字符组内的
\\d不会被识别为「匹配0-9任意数字」的元字符,只会被拆成两个独立的字面字符:反斜杠\和字母d - 也就是说你写的
[\\div]实际匹配的字符只有4种:\、d、i、v,自然无法匹配到第一个测试项里的阿拉伯数字1
修正方案
如果要在字符组里实现匹配数字+罗马数字i/v的需求,有两种可行写法:
- 替换为POSIX标准的字符类写法:
# [:digit:]是POSIX规范中代表数字的字符类,可在[]内正常识别 grep("^chapter [[:digit:]iv]", chapters, ignore.case=T)
- 开启Perl正则引擎支持,添加
perl = T参数即可让\\d在字符组内正常生效:
grep("^chapter [\\div]", chapters, ignore.case=T, perl = T)
内容的提问来源于stack exchange,提问作者Ian G
相关产品推荐
相关产品推荐

