求助:R默认正则引擎未匹配目标,正则哪部分属Perl特定语法?
问题原因解析
你的正则表达式本身没有Perl独有的语法,但R默认的正则引擎(POSIX扩展正则ERE)和Perl兼容正则(PCRE)对\w的解析规则完全不同,这才导致了结果差异:
- 在R默认引擎中,
\w不是预定义的字符类,它会被当作字面量字符w处理。你的字符类[\w.-]实际只能匹配w、.和-,根本无法匹配Dipl.-Ing里的字母,所以正则表达式完全匹配不到目标内容,自然无法替换。 - 当开启
perl = TRUE时,使用PCRE引擎,\w会被正确解析为匹配字母、数字和下划线的字符类,此时[\w.-]+可以完整匹配Dipl.-Ing和MBA这类头衔,正则的两个分支分别匹配开头的Dipl.-Ing.和结尾的MBA.,替换后就得到了中间的名字部分。
如果想在R默认引擎下实现同样效果,你需要把\w替换为POSIX标准的字符类[[:alnum:]],同时保留原有的.和-,修改后的正则如下:
gsub("^[[:alnum:].-]+\\.\\s|\\s[[:alnum:].-]+\\.$", "", "Dipl.-Ing. Jerzy Textor MBA.") # [1] "Jerzy Textor"
内容的提问来源于stack exchange,提问作者thothal
相关产品推荐
相关产品推荐

