expresión regular entra en bucle infinito

Estoy analizando (especies) nombres de la forma:

Parus Ater
H. sapiens
T. rex
Tyr. rex

que normalmente tienen dos términos (binomial) pero a veces tienen 3 o más.

Troglodytes troglodytes troglodytes 
E. rubecula sensu stricto

escribí

[A-Z][a-z]*\.?\s+[a-z][a-z]+(\s*[a-z]+)*

que funcionó la mayor parte del tiempo pero ocasionalmente entró en un bucle infinito. Tomó un tiempo para localizar que estaba en la coincidencia de expresiones regulares y luego me di cuenta de que era un error tipográfico y debería haber escrito

[A-Z][a-z]*\.?\s+[a-z][a-z]+(\s+[a-z]+)*

que realiza correctamente.

Mis preguntas son:

¿Por qué sucede este bucle?¿Hay alguna manera de verificar errores de expresiones regulares similares antes de ejecutar el programa? De lo contrario, puede ser difícil atraparlos antes de distribuir el programa y causar problemas.

[Nota: no necesito una expresión más general para las especies; hay una especificación formal de expresiones regulares de más de 100 líneas para los nombres de las especies; esto fue solo un filtro inicial].

NOTA: El problema surgió porque, aunque la mayoría de los nombres se extrajeron precisamente en 2 u ocasionalmente 3/4 términos (como en cursiva), hubo algunos falsos positivos (como"Homo sapiens lives in big cities like London") y el partido falla en "L".

NOTA: al depurar esto, he encontrado que la expresión regular a menudo se completaba pero era muy lenta (por ejemplo, en cadenas de destino más cortas). Es valioso que encontré este error a través de un caso patológico. ¡He aprendido una lección importante!

Respuestas a la pregunta(2)

Su respuesta a la pregunta