如何用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
相关产品推荐
相关产品推荐

