如何用R语言grepl匹配纯数字或带小数点的数字格式
R语言匹配纯数字/带小数点数字的正确正则写法
问题原因
你的原正则([[:digit:]]+\.?[[:digit:]]*)是部分匹配,只要字符串中存在符合规则的片段就会返回TRUE。比如"1234,34"里的"1234"部分完全符合规则,所以grepl返回了TRUE,不符合你的预期。
解决方案:使用完全匹配正则
要确保整个字符串都符合格式,必须用^(字符串开头)和$(字符串结尾)锚定,同时调整正则逻辑:
允许末尾带小数点的情况(如"1234.")
# 正则:^[[:digit:]]+(\\.[[:digit:]]*)?$ grepl("^[[:digit:]]+(\\.[[:digit:]]*)?$", c("1234.34", "1234,34", "1234", "1234.")) # 输出结果:[1] TRUE FALSE TRUE TRUE
不允许末尾带小数点的情况(仅"1234"或"1234.34")
# 正则:^[[:digit:]]+(\\.[[:digit:]]+)?$ grepl("^[[:digit:]]+(\\.[[:digit:]]+)?$", c("1234.34", "1234,34", "1234", "1234.")) # 输出结果:[1] TRUE FALSE TRUE FALSE
正则说明
^:强制匹配字符串的起始位置[[:digit:]]+:匹配至少一个数字(\\.[[:digit:]]*)?:可选的小数点部分,?表示该段可以不存在;\\.匹配小数点,[[:digit:]]*匹配0个或多个数字$:强制匹配字符串的结束位置
内容的提问来源于stack exchange,提问作者arnyeinstein
相关产品推荐
相关产品推荐

