Python Regex coincide con los corchetes opcionales

Tengo las siguientes cadenas:

1 "RJ BRUCE & OTHERS VBJ & WLA EDWARDS And Ors CA CA19/02 27 February 2003", 2 "H v DIRECTOR OF PROCEEDINGS [2014] NZHC 1031 [16 May 2014]", 3 '''GREGORY LANCASTER AND JOHN HENRY HUNTER V CULLEN INVESTMENTS LIMITED AND ERIC JOHN WATSON CA CA51/03 26 May 2003''' 

Estoy tratando de encontrar una expresión regular que coincida con todas ellas. No sé cómo hacer coincidir los corchetes opcionales alrededor de la fecha al final de la cadena, por ejemplo, [16 de mayo de 2014].

 casename = re.compile(r'(^[AZ][A-Za-z\'\(\) ]+\b[v|V]\b[A-Za-z\'\(\) ]+(.*?)[ \[ ]\d+ \w+ \d\d\d\d[\] ])', re.S) 

La fecha de expresión regular al final solo hace coincidir los casos con las fechas entre corchetes, pero no los que no.

Gracias a todos los que respondieron. @Matt Clarkson, lo que estoy tratando de hacer coincidir es una ‘decisión’ judicial en un texto mucho más amplio. Hay una gran variación dentro de esos manejadores, pero todos comienzan al principio de una línea con ‘v’ en comparación con los nombres de las partes y una fecha al final. Principalmente los nombres de las partes están en mayúscula pero no exclusivamente. Estoy intentando tener solo una coincidencia por documento y no falsos positivos.

Conseguí que todos coincidieran con esto (deberá agregar la marca que no distingue mayúsculas y minúsculas):

 (^[az][az\'&\(\) ]+\bv\b[az&\'\(\) ]+(?:.*?) \[?\d+ \w+ \d{4}\]?) 

Demo regex

Explicación:

  • ( Comenzar el grupo de captura
    • [az\'&\(\) ]+ Une uno o más de los caracteres en este grupo
    • \b Unir un límite de palabra
    • v Empareja el carácter 'v' literalmente
    • \b Unir un límite de palabra
    • [az&\'\(\) ]+ Une uno o más de los caracteres en este grupo
    • (?: Comenzar grupo no-captura
      • .*? Emparejar cualquier cosa
    • ) Fin del grupo que no captura.
    • \[?\d+ \w+ \d{4}\]? Coincidir con una fecha, opcionalmente entre paréntesis
  • ) Grupo de captura final

Al usar su expresión regular y las cadenas de entrada, parece que solo coincidirá con la segunda línea (si se libera de la ‘^’ al comienzo de la expresión regular. He agregado comentarios en línea a cada sección de la expresión regular que proporcionó a hazlo más claro.

¿Puedes indicar qué estás tratando de capturar de cada línea? ¿Quieres la cadena completa? ¿Solo la palabra que precede inmediatamente a la única letra ‘v’? ¿Quieres que la fecha se capture por separado?

Dependiendo de las partes que desee capturar, cada sección puede dividirse en sus respectivos grupos de coincidencia: ejemplo de regex101.com . Esto es un poco más suelto que el tuyo (captura la sección completa entre comillas en lugar de solo la palabra que precede a la única ‘v’) y se divide para ayudar a la legibilidad (cada “grupo” en su propia línea).

Este ejemplo también asume que la nueva línea es intencional, y es compatible con el componente de nueva línea (advertencia: PODRÍA aspirar más de lo que pretende, dependiendo de si la fecha al final coincide o no).

Cómo hacer los corchetes opcionales, se puede lograr así:

[\[]* con el * hace que la apertura [ opcional.

Algunas recomendaciones si puedo:

  • Este \d\d\d\d también podría expressse así \d{4}

  • [v|V] en regex lo que está dentro de [] ya es uno u otro | no es necesario [vV]

Y aquí está lo que es una demostración en línea.