Python正则匹配:提取空格/连字符后的数值,排除num后单个数字
解决方法
方法一:使用正则表达式直接捕获目标数值
原代码的问题在于将每行转为列表字符串后,误匹配了num后的序号数字。可以通过调整正则表达式,精准捕获连字符(含前后可选空格)后的小数数值:
import re text = str('''\ num1 - 1.23 num2-3.21 num3 - 9.31\ ''') # 匹配'-'后(可跟任意空格)的小数,捕获组提取数值 result = re.findall(r'-[\s]*(\d+\.\d+)', text) print(result) # 输出: ['1.23', '3.21', '9.31']
正则说明:
-:匹配连字符[\s]*:匹配0个或多个空格(兼容num后带空格/不带空格的情况)(\d+\.\d+):捕获小数格式的数值(至少1位整数+小数点+至少1位小数)re.findall会自动返回所有捕获组的内容,正好得到目标列表
方法二:逐行分割处理(无需正则)
如果不想用正则,可以直接按行分割文本,通过字符串操作提取目标数值:
text = str('''\ num1 - 1.23 num2-3.21 num3 - 9.31\ ''') result = [] for line in text.split('\n'): if line: # 跳过分割后产生的空行 # 按'-'分割取后半段,去除前后空格后加入结果 target_num = line.split('-')[-1].strip() result.append(target_num) print(result) # 输出: ['1.23', '3.21', '9.31']
内容的提问来源于stack exchange,提问作者Lloyd
相关产品推荐
相关产品推荐

