如何用正则捕获OFFICER'S SIGNATURE后第二行的目标内容?
正则匹配解决方案
问题说明
给定文本:
text = 'DEFINING PATHWAY /n \s 126 HI. DEPT. INIT\n E. OFFICER\'S SIGNATURE\n N/A\n EQUIPMENT 1x23\n N/A\ A. B. C. D. E. F. G. FAULT REPAIR12 _ 23 E. OFFICER\'S SIGNATURE\n 00039501\n EQUIPMENT_SERVER_COMPUTER 12 85\n 1362\n \n 7\n 1\n 2\n CV031\n \n 4. METER\nSECTION IV SUMMARY\n 46. SPEC PURPOSE A. B. C. D. E. F. G. H.\n38. MAINT. MAN\n 39. RATE\n 40. SUPERVISOR\n 41. PRI\n 42. T/A\nC. DIV. INIT\n D. DEPT. INIT\n E. OFFICER\'S SIGNATURE\n X4549803078\n EQUIPMENT3_4d HTA CHIP\n X&6a\n'
需求:找到所有包含OFFICER'S SIGNATURE的行后,跳过紧随的一行,捕获再下一行的所有内容(直到换行)。预期结果:
matches = ['EQUIPMENT 1x23', 'EQUIPMENT_SERVER_COMPUTER 12 85', 'EQUIPMENT3_4d HTA CHIP']
之前尝试的正则均返回空列表,原因是原文本中OFFICER'S SIGNATURE所在行前面有前置字符(如E.),但正则未匹配这些前置内容,导致找不到匹配项。
正确正则实现
核心代码
import re # 正确的正则模式 equipment_pattern = r".*OFFICER'S SIGNATURE\n\s*.+\n\s*(.+?)\s*\n" matches = re.findall(equipment_pattern, text) print(matches)
运行输出:
['EQUIPMENT 1x23', 'EQUIPMENT_SERVER_COMPUTER 12 85', 'EQUIPMENT3_4d HTA CHIP']
正则解释
.*OFFICER'S SIGNATURE:匹配行内任意前置字符,直到OFFICER'S SIGNATURE,解决原文本中该行有前缀的问题\n:匹配OFFICER'S SIGNATURE所在行的换行符\s*.+\n:跳过紧随的一行,\s*匹配行首空白,.+匹配该行内容,\n匹配换行\s*(.+?)\s*\n:捕获目标行内容,\s*忽略行首行尾空白,(.+?)非贪婪匹配目标内容直到换行
兼容末尾行的优化版
如果目标行可能是文本最后一行(无后续换行),可以调整为:
equipment_pattern = r".*OFFICER'S SIGNATURE\n\s*.+\n\s*(.+?)\s*(?=\n|$)"
内容的提问来源于stack exchange,提问作者Arica Christensen
相关产品推荐
相关产品推荐

