如何用正则表达式(regex)查找指定单词下方的数字?
匹配指定单词下方的数字解决方案
示例文本
Property Size Jerusalem 811.00 A new property agreement
核心思路
要获取"Size"所在行下一行的数字,核心是先定位到包含"Size"的行,再从下一行中提取目标数字。下面提供两种实用方案:
方案1:多行正则匹配(适合支持正则多行模式的场景)
利用正则的多行模式,直接匹配包含"Size"的行,再捕获下一行的数字。
正则表达式
^.*Size.*$\n.*?(\d+\.\d+)
表达式解释
^.*Size.*$:匹配任意包含"Size"的完整行\n:匹配换行符,定位到下一行.*?:非贪婪匹配下一行开头的无关内容(比如示例中的"Jerusalem ")(\d+\.\d+):捕获小数格式的目标数字
Python代码实现
import re text = """Property Size Jerusalem 811.00 A new property agreement""" # 启用多行模式(re.MULTILINE) match = re.search(r'^.*Size.*$\n.*?(\d+\.\d+)', text, re.MULTILINE) if match: print(match.group(1)) # 输出结果:811.00
方案2:分行定位提取(直观易读,适合新手)
先把文本按行拆分,找到包含"Size"的行的位置,再取下一行内容并提取数字。
Python代码实现
import re text = """Property Size Jerusalem 811.00 A new property agreement""" lines = text.splitlines() for idx, line in enumerate(lines): if 'Size' in line: # 确保下一行存在,避免索引越界 if idx + 1 < len(lines): next_line = lines[idx+1] # 从下一行提取数字 num_result = re.search(r'\d+\.\d+', next_line) if num_result: print(num_result.group()) # 输出结果:811.00 break
注意事项
- 如果文本中存在多个包含"Size"的行,可根据需求调整逻辑(取第一个匹配行的下一行,或遍历所有匹配行)
- 若数字格式可能为整数(如
811),可将数字匹配正则改为(\d+(?:\.\d+)?),兼容整数和小数格式
内容的提问来源于stack exchange,提问作者shalom shaer
相关产品推荐
相关产品推荐

