You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python正则提取不区分大小写的stop后所有整数与浮点数

问题原因

你写的正则无法匹配后续行数字的核心原因是默认配置下.元字符不匹配换行符,(?<=stop.*)只能定位到stop所在行的结束位置之前的区域,自然抓不到换行之后的5、2.3222这两个数字。

解决方案

因为你用的是支持可变长度后视的PyPi regex库,有两种常用调整方式可以实现需求:

方式1:添加DOTALL匹配标志

给正则编译增加regex.DOTALL(缩写为regex.S)标志,让.可以匹配换行符,调整后的代码如下:

import regex

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

         5 ,#2.3222
      """
# 增加regex.S标志让.匹配换行
pattern = regex.compile(r'(?<=stop.*)\d+(?:\.\d+)?', regex.I | regex.S)
res = []
# 按格式要求区分整数和浮点数类型
for num_str in pattern.findall(str):
    if '.' in num_str:
        res.append(float(num_str))
    else:
        res.append(int(num_str))
print(res) # 输出 [5.02, 16.1, 5, 2.3222]

方式2:替换匹配所有字符的规则

不想加标志的话,可以把.*替换为[\s\S]*(匹配所有空白/非空白字符,天然包含换行符),写法如下:

# 不需要额外加DOTALL标志
pattern = regex.compile(r'(?<=stop[\s\S]*)\d+(?:\.\d+)?', regex.I)

内容的提问来源于stack exchange,提问作者yair_elmaliah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 01:06:04