分享
三行代码  ›  专栏  ›  技术社区  ›  HHC

正则表达式在查找浮点字符串时行为异常

  •  0
  • HHC  · 技术社区  · 4 天前

    这样做(在python 3.7.3中):

    >>> from re import findall
    >>> s = '7.95 + 10 pieces'
    >>> findall(r'(\d*\.)?\d+', s)
    ['7.', '']   # Expected return: ['7.95', '10']
    

    我不知道为什么里面没有找到所有的漂浮物?这可能是关于捕获组的python怪癖吗?

    我的正则表达式背后的逻辑: (\d*\.)? 匹配任何位数中的1或无,后跟句点。 \d+ 然后对任意数字进行马赫运算,因此此正则表达式应与 11.11, 11, .11

    1 回复  |  直到 4 天前
        1
  •  3
  •   sshashank124    4 天前

    正如您正确猜测的那样,这与捕获组有关。根据文件 re.findall :

    如果模式中存在一个或多个组,则返回组列表

    () non-capturing 使用 (?:)

    >>> pattern = r'(?:\d*\.)?\d+'
    
    >>> findall(pattern, s)
    ['7.95', '10']