【问题标题】:Overlapping regex重叠的正则表达式
【发布时间】:2014-08-11 17:33:36
【问题描述】:

我想要一个匹配任何一组数字的正则表达式,并带有一个可能的点。如果后面有另一个点和更多数字,则与前面的数字、点和后面的数字进行重叠匹配。
示例字符串 = 'aa323aa232.02.03.23.99aa87..0.111111.mm'
期望的结果 = [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  

输出:

['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']

【问题讨论】:

  • 99 本身不是结果吗?

标签: python regex


【解决方案1】:

这使用前瞻断言进行捕获,然后使用另一个表达式来按照您的规则吞噬字符:

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

输出

['323', '232.02', '02.03', '03.23', '23.99', '87', '0.111111']

【讨论】:

  • +1 - 具体来说,Python 解决方案是re.findall('(?=(\d+(?:\.\d+)?))\d+(?:\.\d+(?!\.?\d))?', i),其中i 是字符串。
猜你喜欢
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多