yai*_*iah 4 python regex string python-re
假设我有以下字符串:
\nstr = """\n HELLO 1 Stop #$**& 5.02\xe2\x80\xbc\xef\xb8\x8f 16.1 \n regex\n\n 5 ,#2.3222\n """\nRun Code Online (Sandbox Code Playgroud)\n我想导出“stop”一词后面的所有数字,无论是int还是float,不区分大小写。所以预期结果将是:
\n[5.02, 16.1, 5, 2.3222]\nRun Code Online (Sandbox Code Playgroud)\n到目前为止,我走得最远的是使用其他帖子中的 PyPi 正则表达式:
\nregex.compile(r'(?<=stop.*)\\d+(?:\\.\\d+)?', regex.I)\nRun Code Online (Sandbox Code Playgroud)\n但这个表达式只给我 [5.02, 16.1]
\n还有一个,尽管使用的是较新的regex模块:
(?:\\G(?!\\A)|Stop)\\D+\\K\\d+(?:\\.\\d+)?\nRun Code Online (Sandbox Code Playgroud)\n\n在 中Python,这可能是
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)\nRun Code Online (Sandbox Code Playgroud)\n并且会产生
\n[\'5.02\', \'16.1\', \'5\', \'2.3222\']\nRun Code Online (Sandbox Code Playgroud)\n不要以内置函数命名变量,例如str、list等dict。
如果您需要进一步将搜索限制在某个范围内(例如Stop和之间的所有数字end),您也可以使用
(?:\\G(?!\\A)|Stop)(?:(?!end)\\D)+\\K\\d+(?:\\.\\d+)?\n# ^^^ ^^^\nRun Code Online (Sandbox Code Playgroud)\n请参阅 regex101.com 上的另一个演示。
\n