【发布时间】:2020-01-24 02:09:53
【问题描述】:
我正在学习正则表达式,所以我正在尝试制作正则表达式,它应该将给定的输入验证为正确的整数和十进制数字,带/不带正号/减号。
我在 python 中创建了正则表达式:
([+-]?[0-9]+\.[0-9]+)|([+-]?[5-9]+)
但它不能正常工作。它的显示
# expecting left side expression of pipe-sign is running
re.search("([+-]?[0-9]+\.[0-9]+)|([+-]?[5-9]+)","1.1") # true correct
re.search("([+-]?[0-9]+\.[0-9]+)|([+-]?[5-9]+)","1.") # false correct
re.search("([+-]?[0-9]+\.[0-9]+)|([+-]?[5-9]+)","1") # false correct
# expecting right side expression of pipe-sign is running
re.search("([+-]?[0-9]+\.[0-9]+)|([+-]?[5-9]+)","5") # true correct
re.search("([+-]?[0-9]+\.[0-9]+)|([+-]?[5-9]+)","5.") # true Wrong
re.search("([+-]?[0-9]+\.[0-9]+)|([+-]?[5-9]+)","5.") # true Wrong
谁能指出我在这里做错了什么? 谢谢
【问题讨论】:
-
为什么你有
[5-9]作为一个单独的案例? -
只是玩弄这些范围来清除概念。
-
那么您还需要调整
[0-9]以捕获小数点前的数字0、1、2、3和4:([+-]?[0-4]+\.[0-9]+)|([+-]?[5-9]+) -
最后 2 个得到匹配,因为模式是交替的,它的第二部分
([+-]?[5-9]+)匹配5.中的 5 您可以将模式更新为[+-]?(?:[0-9]+\.[0-9]+|[5-9]+(?!\S))regex101.com/r/KpQZKG/1跨度>