Don't get me wrong, I'm sure you know this is far from being perfect and I know this isn't supposed to be perfect. But I really think this is bad design. Simple example: Try to parse "US$100".
Having the +/- outside the number pattern is strange.
In math +/-0, +0 and -0 are different things (not sure if Wikibase can store these at the moment).
Unicode minus character is missing.
Forcing /u(ngreedy) is not needed and bad for overall performance.
Concatenating regular expressions like that is bad practice. Sorry to say that, but that's what I learned from doing such things over the years.