我正在尝试匹配: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 | _,则试图不匹配)或更多数字之间)。有什么建议吗?
答案 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
或空白字符的单词字符$
字符串结尾如果您不想使用锚点来断言字符串的开始和结尾,则还可以使用环视断言来断言左侧和右侧的内容不是非whitspace字符:
(?<!\S)[0-9]*\.[^\W_Dd\s]*(?!\S)
答案 1 :(得分:1)
\d*[.](?!.*[_Dd]).*
是您要寻找的: