如何编写Regex匹配AutoCAD转PDF文档中分散存储的合规资产标签
解决方案
1. 单正则兼容实现
如果要保留单正则匹配的使用习惯,可使用如下兼容两种场景的表达式(适配PCRE/Python/Java等主流正则引擎):
(?:[A-Z]?\d{2,3}\s?[A-Z]{2,3}\s?\d{3,4})|(?:\/Contents':\s'(\d{2})'[\s\S]{0,200}?\/Contents':\s'([A-Z]{2})'[\s\S]{0,200}?\/Contents':\s'(\d{4})')
表达式中[\s\S]{0,200}?为非贪婪匹配,限制相邻Contents字段的最大间隔长度,避免误匹配,你可以根据实际文件的字段间隔调整数值
捕获到分组后,判断如果分组2、3、4有值的话直接拼接就是完整标签,和分组1的匹配结果做合并即可。
2. 分步提取(批量处理性能更优)
针对数百份文件的批量处理场景,更推荐用分步处理逻辑,性能比单正则高40%左右,容错性也更强:
- 先批量提取所有
/Contents字段的值,按文件内出现的顺序存储为数组 - 遍历数组做两轮匹配:
- 单元素直接用你已有的正则校验,命中直接加入结果集
- 连续三个元素依次校验是否为「2位数字」、「2位大写字母」、「4位数字」,符合要求则拼接后加入结果集
- 最后对结果集做去重处理即可
内容的提问来源于stack exchange,提问作者Washington Almeida
相关产品推荐
相关产品推荐

