首页 > 解决方案 > 提取特定单词后的所有数字(整数和浮点数)

问题描述

假设我有以下字符串:

str = """
         HELLO 1 Stop #$**& 5.02‼️ 16.1 
         regex

         5 ,#2.3222
      """

我想导出所有数字,无论是 int 还是 float 在“stop”一词之后,不区分大小写。所以预期的结果将是:

[5.02, 16.1, 5, 2.3222]

到目前为止,我最远的是使用此处其他帖子中的 PyPi 正则表达式:

regex.compile(r'(?<=stop.*)\d+(?:\.\d+)?', regex.I)

但是这个表达式只给了我 [5.02, 16.1]

标签: pythonregexstringre

解决方案


还有一个,尽管使用了较新的regex模块:

(?:\G(?!\A)|Stop)\D+\K\d+(?:\.\d+)?

在 regex101.com 上查看演示


Python,这可能是

import regex as re

string = """
         HELLO 1 Stop #$**& 5.02‼️ 16.1 
         regex

         5 ,#2.3222
      """

pattern = re.compile(r'(?:\G(?!\A)|Stop)\D+\K\d+(?:\.\d+)?')

numbers = pattern.findall(string)
print(numbers)

并且会产生

['5.02', '16.1', '5', '2.3222']

不要以内置函数命名变量,例如strlistdict


如果您需要更进一步并将搜索限制在某些范围内(例如 和 之间的所有数字Stopend,您也可以使用

(?:\G(?!\A)|Stop)(?:(?!end)\D)+\K\d+(?:\.\d+)?
#           ^^^        ^^^

在 regex101.com 上查看另一个演示。


推荐阅读