重叠正则表达式

use*_*661 10 python regex

我想要一个匹配任何数字集的正则表达式,一个可能的点.如果后面有另一个点和更多数字,请与前一个数字,点和后面的数字重叠匹配.
示例string = 'aa323aa232.02.03.23.99aa87..0.111111.mm'
desired results =[323, 232.02, 02.03, 03.23, 23.99, 87, 0.111111]

目前使用:

import re
i = 'aa323aa232.02.03.23.99aa87..0.111111.mm'
matches = re.findall(r'(?=(\d+\.{0,1}\d+))', i)
print matches  
Run Code Online (Sandbox Code Playgroud)

输出:

['323', '23', '232.02', '32.02', '2.02', '02.03', '2.03', '03.23', '3.23', '23.99', '3.99', '99', '87', '0.111111', '111111', '11111', '1111', '111', '11']
Run Code Online (Sandbox Code Playgroud)

Mil*_*ler 10

这使用前瞻断言进行捕获,然后使用另一个表达式来遵循规则:

>>> import re
>>> i = 'aa323aa232.02.03.23.99aa87..0.111111.mm'
>>> re.findall(r'(?=(\d+(?:\.\d+)?))\d+(?:\.\d+(?!\.?\d))?', i)
Run Code Online (Sandbox Code Playgroud)

产量

['323', '232.02', '02.03', '03.23', '23.99', '87', '0.111111']
Run Code Online (Sandbox Code Playgroud)

  • +1 - 具体来说,Python解决方案是`re.findall('(?=(\ d +(?:\.\ d +)?))\ d +(?:\.\ d +(?!\.?\ d) ))?',i)`其中`i`是字符串. (5认同)