¿Cómo hago parte de un regex match opcional?

Esta es una cadena de ejemplo:

123456#p654321

Actualmente, estoy usando este partido para capturar123456 y654321 en dos grupos diferentes:

([0-9].*)#p([0-9].*)

Pero en ocasiones, la#p654321 parte de la cadena no estará allí, así que solo quiero capturar el primer grupo. Intenté hacer el segundo grupo "opcional" agregando? a ella, que funciona, pero solo mientras exista una#p al final de la cadena restante.

¿Cuál sería la mejor manera de resolver este problema?

Respuestas a la pregunta(2)

Su respuesta a la pregunta