This is C#, .net, and Linq, so I doubt you can use it, but maybe someone else can and maybe it will give you an idea.
The groups will be named "1" through "12" (group "0" is the overall match) so we can test which group had a successful match and parse its name to an integer.
int month = System.Int32.Parse
"bla bla bla 19 March 2023 bla bla bla"
) [ 0 ].Groups.OfType<System.Text.RegularExpressions.Group>().First ( x => x.Success && ( x.Name != "0" ) ).Name
) % 12 ;
Error handling is left as an exercise.