正则捕获组异常:马拉卡纳固定座椅控制号提取故障
修正正则表达式提取马拉卡纳固定座椅控制号
问题分析
- 多号码捕获失败:原正则使用
\g<NUMERO_CONTROLE_CADEIRA>子例程,但未将多号码匹配设计为可重复的捕获单元,且命名捕获组默认仅保留最后一次匹配结果,导致第二个号码无法被捕获。 - 号码末尾缺失:原表达式
\d(\d|\s|-|–)+强制后续至少一个字符(数字/空格/连字符),当号码末尾为数字时,易被后续非数字字符(如括号)截断,丢失最后一位数字。
修正后的正则表达式
cadeiras?\s*(perpétua|cativa)?s?\s*(de|com|,)?\s*(o)?\s*(número)?\s*(de)?\s*(controle)?\s*(inicial)?\s*(de)?\s*(números?|nº)?\s*(?<NUMERO_CONTROLE_CADEIRA>\d(?:\d|\s|-|–)*\d)(?:\s*e\s*(?<NUMERO_CONTROLE_CADEIRA>\d(?:\d|\s|-|–)*\d))*
关键修改点
- 修复号码末尾缺失:将原号码匹配逻辑
\d(\d|\s|-|–)+调整为\d(?:\d|\s|-|–)*\d,确保号码以数字开头和结尾,彻底避免截断丢失最后一位;用非捕获组(?:...)优化匹配性能。 - 支持多号码捕获:新增
(?:\s*e\s*(?<NUMERO_CONTROLE_CADEIRA>...))*结构,允许匹配任意多个以葡萄牙语「e」分隔的控制号,重复命名捕获组可记录所有匹配结果(需开启PCRE引擎的全局匹配模式)。 - 兼容文书表述:保留原正则中冗余的
(de)?等结构,确保适配法律文书中不同的表述习惯,无需额外精简即可覆盖更多场景。
测试验证
针对你提供的案例:
- 对于文本:
O Autor é detentor do direito de uso de duas cadeiras perpétuas com o
número de controle nº 1234-123456789 e 3421 – 11111111 (Doc. 04) do
Estádio
将完整捕获两个控制号:1234-123456789和3421 – 11111111。
- 对于文本:
O Autor é detentor do direito de uso de uma cadeira perpétua com o
número de controle nº 4321-112223333 (Doc. 07) do Estádio Jornalista
Mário Filho
将完整捕获控制号:4321-112223333。
内容的提问来源于stack exchange,提问作者celsowm
相关产品推荐
相关产品推荐

