提取特定单词后的所有数字(整数和浮点数)

yai*_*iah 4 python regex string python-re

假设我有以下字符串:

\n
str = """\n         HELLO 1 Stop #$**& 5.02\xe2\x80\xbc\xef\xb8\x8f 16.1 \n         regex\n\n         5 ,#2.3222\n      """\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
[5.02, 16.1, 5, 2.3222]\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
regex.compile(r'(?<=stop.*)\\d+(?:\\.\\d+)?', regex.I)\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

Jan*_*Jan 5

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

\n
(?:\\G(?!\\A)|Stop)\\D+\\K\\d+(?:\\.\\d+)?\n
Run Code Online (Sandbox Code Playgroud)\n

请参阅regex101.com 上的演示

\n
\n

在 中Python,这可能是

\n
import regex as re\n\nstring = """\n         HELLO 1 Stop #$**& 5.02\xe2\x80\xbc\xef\xb8\x8f 16.1 \n         regex\n\n         5 ,#2.3222\n      """\n\npattern = re.compile(r\'(?:\\G(?!\\A)|Stop)\\D+\\K\\d+(?:\\.\\d+)?\')\n\nnumbers = pattern.findall(string)\nprint(numbers)\n
Run Code Online (Sandbox Code Playgroud)\n

并且会产生

\n
[\'5.02\', \'16.1\', \'5\', \'2.3222\']\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
\n

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

\n
(?:\\G(?!\\A)|Stop)(?:(?!end)\\D)+\\K\\d+(?:\\.\\d+)?\n#           ^^^        ^^^\n
Run Code Online (Sandbox Code Playgroud)\n

请参阅 regex101.com 上的另一个演示

\n