正则表达式解析交易文本:按需包含D:描述信息的问题
正则解析交易记录问题解决指南
问题原因
你遇到的多交易合并问题,核心是正则未明确匹配边界:当交易不含D:描述时,正则无法判断当前交易的结束位置,只能持续向后匹配直到找到下一个D:或文本末尾,最终把多个独立交易合并成了一个大匹配结果。本质是正则使用了贪婪匹配逻辑,且未设置有效的交易终止条件。
修正方案
解决关键是给正则加上明确的交易终止边界,确保每个交易匹配到下一个交易的起始标识就停止。假设你的交易记录结构为[交易类型] (标的代码) 金额 [可选D:描述],可以使用以下正则:
\[ST|OP\] \((META|MSFT)\) \d+(?:\.\d+)?(?:\s+D:\s*.+?(?=\s*(?:\[ST|OP\]|\Z)))?
核心逻辑说明:
(?=\s*(?:\[ST|OP\]|\Z)):正向预查规则,匹配到下一个交易类型([ST]/[OP])或者文本结尾就停止,强制截断当前交易的匹配范围(?:\s+D:\s*.+?(?=...))?:用非捕获组加问号实现D:描述的可选匹配,且仅匹配到下一个交易开始前的内容- 全程使用非贪婪匹配(
+?),避免过度匹配无关内容
PDF解析适配优化
针对PDF解析中可能出现的D与冒号不连续(比如D : 交易说明、D : 备注)的情况,只需把正则中的D:替换为D\s*:,允许两者之间存在任意空格:
\[ST|OP\] \((META|MSFT)\) \d+(?:\.\d+)?(?:\s+D\s*:\s*.+?(?=\s*(?:\[ST|OP\]|\Z)))?
这样不管D和冒号之间有多少空格,都能正确识别描述信息,同时依然保证每个交易的独立匹配。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

