stringr与base grep的[:punct:]正则字符类定义是否存在差异?
关于stringr与base R中[:punct:]正则字符类的识别差异
这确实是个容易被忽略的细节——stringr包和base R里的grep系列函数对[:punct:]这个正则字符类的定义并不完全一致,我来帮你梳理一下你发现的这些情况:
核心差异示例
最典型的就是^符号的识别:
# base R的grepl判定 grepl('[[:punct:]]', '^HELLO') # [1] TRUE # stringr的str_detect判定 str_detect('^HELLO', '[[:punct:]]') # [1] FALSE
两者识别一致的情况
对于一些常见基础标点(比如, . ?等),两个工具的判定是统一的:
grepl('[[:punct:]]', '?HELLO') # [1] TRUE str_detect('?HELLO', '[[:punct:]]') # [1] TRUE
其他存在差异的标点
你提到的、~、|这些标点也属于识别有差异的范畴,除此之外可能还有更多特殊符号(比如反引号`、部分非英文标点等)会出现类似的判定分歧。
内容的提问来源于stack exchange,提问作者mochi
相关产品推荐
相关产品推荐

