Python正则表达式匹配某些浮点数

时间:2019-05-31 18:34:31

标签: regex python-3.x

我正在尝试匹配:0个或多个数字,后跟一个圆点,后跟一个((0个或多个数字),但不(如果后跟d,D或_),则不这样)

一些例子,什么应该匹配/不匹配:

匹配:

['1.0','1.','0.1','.1','1.2345']

不匹配:

['1d2','1.2d3','1._dp','1.0_dp','1.123165d0','1.132_dp','1D5','1.2356D6']

目前我有:

"([0-9]*\.)([0-9]*(?!(d|D|_)))"

正确匹配匹配列表中的所有内容。但是对于那些东西,它不应该匹配,因此错误地匹配:

['1.2d3','1.0_dp','1.123165d0','1.132_dp','1.2356D6']

并且在以下位置正确不匹配:

['1d2','1._dp','1D5']

所以看来我对[[0-9] *(?!(d | D | _))部分有问题,如果在点(零后有ad | D | _,则试图不匹配)或更多数字之间)。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您可以使用negated character class来匹配不在字符类中的任何字符,而不是使用否定的超前查询。

如果只想匹配没有dD_或空白字符的单词字符,则可以使用[^\W_Dd\s]

您也可以删除\W\s以匹配除dD_以外的所有内容

^[0-9]*\.[^\W_Dd\s]*$

说明

  • ^字符串的开头
  • [0-9]*\.匹配0+乘以数字0-9,后跟一个点
  • [^\W_Dd\s]*否定的字符类,匹配0+次不带_ D d或空白字符的单词字符
  • $字符串结尾

Regex demo

如果您不想使用锚点来断言字符串的开始和结尾,则还可以使用环视断言来断言左侧和右侧的内容不是非whitspace字符:

(?<!\S)[0-9]*\.[^\W_Dd\s]*(?!\S)

Regex demo

答案 1 :(得分:1)

\d*[.](?!.*[_Dd]).*是您要寻找的:

相关问题