我正在尝试了解更多关于正则表达式的知识,我相信下面的一个表达式可以发现在一个高达9990亿的数字上有一个缺失的近似值。下面的一个我认为应该做同样的,但我没有得到类似的结果
missingParenReg=re.compile(r"^\([$]*[0-9]{1,3}[,]?[0-9]{0,3}[,]?[0-9]{0,3}[,]?[0-9]{0,3}[.]*[0-9]*[^)]$")
missingParenReg2=re.compile(r"^\([$]?([0-9]{1,3}[,]?)+[.]*[0-9]*[^)]$")
我想第二个是说:
必须有一个开放的paren开始
可能有或可能没有一个美元符号
下一个组必须至少存在一次,但可以无限次存在
该组应至少有一个数字,但可以有多达三个
组中的逗号可能只有0个,最多可以有1个
在这一组后面可能有小数点,也可能没有小数点
如果有一个小数点,它后面最多会有0个,但也会有很多未计算的位数
最后不应该有一个收尾计划。在
我正在努力理解这个神奇的东西,所以我会很感激我的正则表达式的更正(如果它可以纠正)除了一个更优雅的解决方案,如果你有它。在
我发现在裁剪regex时使用kiki非常有用。它可以直观地显示正则表达式的运行情况。这是一个巨大的节省时间。在
正则表达式更棘手的部分不是让它们接受有效的输入,而是让它们拒绝无效的输入。例如,第二个表达式接受明显错误的输入,包括:
(1,2,3,4
——每个逗号之间有一个数字(12,34,56
——每个逗号之间有两个数字(1234......5
——小数点数目不限(1234,.5
——小数点前有逗号(123,456789,012
——如果有一些逗号,它们应该在每个三元组之间(01234
——前导零不是常规的(123.4X
——最后一个字符不是结束符下面是一个替代正则表达式,它应该拒绝上面的示例:
[-+]?[$]?(0|[1-9]\d*|[1-9]\d{0,2}(,\d{3})*)(\.\d+)?
|
分隔的三个选项:关于parens,如果您只关心paren是否平衡,那么您可以忽略精确解析出数字格式;只需相信paren之间的任何数字、小数点和逗号的组合都是有效的。然后使用
(?!...)
构造,如果输入的与内部的正则表达式不匹配,则该构造的计算结果为匹配。在(?!\([$\d.,]+\))
是否有嵌套的括号(您的regexp假定没有嵌套的圆括号)?如果没有:
要验证美元金额部分:
^{pr2}$允许:
禁止:
相关问题 更多 >
编程相关推荐