正则表达式需求:匹配仅含数字8的整数与小数
问题描述
我有一组示例数字:
888* 8* 8.88* 88.88* 88888.888* 899900 8.89 0.08 80 89899 50 32 30.8 0.081 0.8 8.1
其中标注*的是仅由数字8组成的数字(包含整数及带小数的形式),其余数字需忽略。我尝试用R语言正则表达式匹配这些目标数字,但现有代码仅实现了部分需求:
num <- c(888, 8, 8.88, 88.88, 88888.888, 899900, 8.89, 0.08, 80, 89899, 50, 32, 30.8, 0.081, 0.8, 8.1) grepl('^8+[^\\.]*[^0-7|9]*', num)
解决方案
你当前的正则表达式逻辑存在漏洞,无法精准匹配仅含8的整数和带小数的情况。正确的正则需要覆盖两种场景:纯整数全为8,或者带小数点且整数、小数部分均只有8。
正则表达式说明
使用正则:^8+(\\.8+)?$
^:匹配字符串起始位置8+:匹配1个或多个连续的8(对应整数部分)(\\.8+)?:可选的小数部分,由小数点加1个或多个8组成,?表示该部分可省略$:匹配字符串结束位置
R语言实现代码
num <- c(888, 8, 8.88, 88.88, 88888.888, 899900, 8.89, 0.08, 80, 89899, 50, 32, 30.8, 0.081, 0.8, 8.1) # 执行匹配 grepl('^8+(\\.8+)?$', num)
运行后会返回一个逻辑向量,目标数字对应的位置为TRUE,其余为FALSE,可准确筛选出所有符合要求的数字。
内容的提问来源于stack exchange,提问作者karuno
相关产品推荐
相关产品推荐

