如何调整grepl,使其仅匹配纯..x格式的列名并返回TRUE?
解决R中data.table读取后过滤Excel自动生成的..x格式列名问题
要精准匹配完全由两个点加数字组成的列名(比如..1、..2这类Excel自动生成的重复列名),同时排除像q3..1这种包含其他字符的列名,需要调整正则表达式的匹配规则:
- 正确的正则表达式:
^\\.\\.\\d+$^锚定字符串开头,确保匹配从列名最开始位置开始\\.\\.匹配连续两个点(点在正则中是特殊字符,必须用反斜杠转义)\\d+匹配一个或多个数字$锚定字符串结尾,确保匹配到列名的最后位置
代码示例
# 构造测试列名 col_names <- c("q1", "q2", "...1", "..2", "q3..1", "..1") # 执行匹配 grepl("^\\.\\.\\d+$", col_names)
运行后输出结果:
[FALSE FALSE TRUE TRUE FALSE TRUE]
为什么原正则不行?
原正则grepl("\\.+", names(dat))的逻辑是只要列名中包含一个或多个点就返回TRUE,所以会误匹配q3..1这类包含额外字符的列名。而调整后的正则通过^和$限定了匹配范围,确保只有完全符合..数字格式的列名才会被选中。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

