This is my final:
[^\d]\s*([6][0]|[1-5][0-9]|[0]*[1-9])\s*[A-HJ-NP-Xc-hj-np-z]\s*[A-HJ-NP-Za-hj-np-z]{2}\s*([\d]{8}\s+[\d]{8}|[\d]{7}\s+[\d]{7}|[\d]{6}\s+[\d]{6}|[\d]{5}\s+[\d]{5}|[\d]{4}\s+[\d]{4}|[\d]{3}\s+[\d]{3}|[\d]{2}\s+[\d]{2}|[\d]{1}\s+[\d]{1}|\d{16}|\d{14}|\d{12}|\d{10}|\d{8}|\d{6}|\d{4}|\d{2})\s*[^\d]
It's lengthy but it works rather well, it will parse through documents and pick out coordinates without having to do very much extra coding.
Here's the breakdown of it, the Expression first searches for '60' if it can't find that it will search for 10-59 then it will search through 01-09 or 1-9:
[^\d]\s*
(
[6][0]|
[1-5][0-9]|
[0]*[1-9]
)
The regex then searches for Three letters (but not I & O), with a possible space between the first and second letter:
\s*
[A-HJ-NP-Xc-hj-np-z]
\s*
[A-HJ-NP-Za-hj-np-z]{2}
\s*
Then it searches for the grid numbers at the end, they need to be either a group of even digits 2 through 16 or two groups of digits with a space in between. So I start the search looking for a possible space in between (largest numbers first) then search for the even digits last.
(
[\d]{8}\s+[\d]{8}|
[\d]{7}\s+[\d]{7}|
[\d]{6}\s+[\d]{6}|
[\d]{5}\s+[\d]{5}|
[\d]{4}\s+[\d]{4}|
[\d]{3}\s+[\d]{3}|
[\d]{2}\s+[\d]{2}|
[\d]{1}\s+[\d]{1}|
\d{16}|
\d{14}|
\d{12}|
\d{10}|
\d{8}|
\d{6}|
\d{4}|
\d{2}
)
\s*[^\d]
-and finally it is surrounded with [^\d]\s* ... \s*[^\d] to search for non-digits surrounding it and optional space in between. If the MGRS is surrounded by more numbers it is not likely an MGRS.
Now all I have to do is trim the last chars off the beginning and end.
-Kyle