我试图使用以下正则表达式从诉讼中提取一个名为“número de controle de cadeira卡蒂瓦do Maracanã”(马拉卡纳的俘虏椅子控制号)的信息:
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|-|–)+)\s*?(e)?\s*?\g<NUMERO_CONTROLE_CADEIRA>
问题是,在两个控制数字出现的情况下,由“e”分开(在pt-br中),即使使用\g子例程,第二个数字也不会被捕获:
O Autor é detentor do direito de uso de duas cadeiras perpétuas com o número de control nº 1234-123456789 e 3421 - 1111111(Doc. 04)体育场
*NUMERO_CONTROLE_CADEIRA:1234-123456789
不仅如此,在某些情况下,组值不完整(最后一个数字出来了):
O Autor é detentor do direito de uso de uma cadeira perpétua com o número de control nº 4321-112223333(Doc. 07)do Estádio Jornalista Mário Filho
*NUMERO_CONTROLE_CADEIRA:4321-11222333
这里有更多案例:https://regex101.com/r/MxTAnZ/1
我如何修正这个正则表达式来正确地得到这些控制数?
1条答案
按热度按时间sulc1iza1#
假设不超过1或2个数字,这个正则表达式将捕获两个:
(\bcadeiras?\b|\bnúmero\b)\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 –\.]*\d)( e (números?|nº)?(?<NUMERO_CONTROLE_CADEIRA2>\d[-\d –\.]*\d))?
参见https://regex101.com/r/88PFZw/1
请注意,您的数字中有两个: