如何使用正则提取指定文本区间内第4个空格前的物料编号
正则提取解决方案
你可以直接通过单条正则一步获取目标物料编号,无需拆分两步处理,适配换行场景的正则如下:
(?<=Date)[\s\S]*?((?:\S+\s){3}\S+)(?=[\s\S]*?Article)
直接取第一个捕获分组的结果即可得到你需要的6ZZ 999 123 S。
匹配规则说明
(?<=Date):后视断言,限定匹配的起始位置为Date关键词之后[\s\S]*?:非贪婪匹配任意字符(包括换行符),跳过Date后面的换行、空白等冗余内容((?:\S+\s){3}\S+):核心捕获分组,对应你要的物料编号:(?:\S+\s){3}:匹配3组「非空字符序列+分隔空格」的组合,对应6ZZ、999、123三段\S+:匹配第4段非空字符S,整体刚好是第4个分隔空格之前的所有内容
(?=[\s\S]*?Article):前视断言,限定匹配范围到Article关键词之前,避免匹配到无效内容
兼容方案
如果你使用的正则引擎不支持非固定长度的后视断言,可先按你现有逻辑提取Date和Article之间的中间内容,再对中间内容执行以下正则匹配,取全匹配结果即可:
^\s*(?:\S+\s){3}\S+
内容的提问来源于stack exchange,提问作者manjesh kumar
相关产品推荐
相关产品推荐

