正则表达式-实数

本文详细介绍了如何构造一个能够匹配所有实数形式的正则表达式,包括整数和小数,并针对特殊情况进行了讨论。

本人给出的实数的正则表达式(可能不对):

^\-?([1-9]\d*|0)(\.\d+)?$

思考过程:

整数

整数包括:0,正整数,负整数

0

0的正则:

^0$
正整数

正整数(必须为1-9开头,后面[0-9]0个或多个)的正则:

^[1-9]\d*$
负整数

负整数(正整数前加"-"):

^\-[1-9]\d*$

0,正整数和负整数合并起来就是整数:

^\-?[1-9]\d*|0$

小数

(这里说的时末尾可以为0的小数)
错误想法(经评论指出):小数就是整数加上小数点再加上1个或多个[0-9]

^(\-?[1-9]\d*|0)\.\d+$

上面这个会漏掉一种情况,小数点左边部分是(-0),则不是整数,但它能组成小数。(-0)加上小数点再加上1个或多个[0-9]也是小数,比如-0.01。
想了下应该这样做,把小数分成2个部分,正小数和负小数,负小数就是正小数前加负号。
那么小数可以写成这样:

^\-?([1-9]\d*|0)\.\d+$

"|"会作用于左边的全部范围,所以要加括号。

实数

(末尾可以为0)
实数包括整数和小数(没有(.\d+)这部分就是整数,有这部分就是小数):

^\-?([1-9]\d*|0)(\.\d+)?$

有错请帮忙指正,谢谢。
匹配多个实数并以逗号分隔的正则表达式可以通过分解实数的结构来构建。一个完整的实数可以包含以下部分: - **符号**(可选):`[+-]?`,表示正负号可以出现 0 次或 1 次。 - **整数部分**:`\d+`,表示至少一个数字。 - **小数部分**(可选):`(\.\d*)?`,表示一个点后跟 0 个或多个数字。 - **指数部分**(可选):`([eE][+-]?\d+)?`,表示科学计数法中的指数部分。 将这些部分组合起来,一个完整的实数匹配模式可以表示为: ```regex ^[+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?$ ``` ### 匹配多个实数 如果需要匹配多个以逗号分隔的实数,可以在上述正则表达式的基础上进行扩展。例如,匹配多个实数并确保它们以逗号分隔的正则表达式如下: ```regex ^([+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?)(,([+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?))*$ ``` #### 解释 - `^` 和 `$`:分别表示字符串的开始和结束,确保整个字符串完全匹配。 - `([+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?)`:匹配一个实数- `(,([+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?))*`:表示逗号后跟一个实数的模式,且可以重复 0 次或多次。 ### 示例代码 以下是一个使用 Python 的 `re` 模块验证字符串是否匹配该正则表达式的示例: ```python import re # 正则表达式匹配多个实数,以逗号分隔 pattern = r'^([+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?)(,([+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?))*$' # 测试字符串 test_string = "123,-45.67,0.89e10,3.14E-5" # 验证匹配 if re.match(pattern, test_string): print("匹配成功") else: print("匹配失败") ``` ### 示例说明 - `"123,-45.67,0.89e10,3.14E-5"`:这是一个符合要求的字符串,包含了多个以逗号分隔的实数- `re.match(pattern, test_string)`:用于检查字符串是否完全匹配正则表达式。 ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值