I need to add full stops to initials in a series of records, but only for the records where the first character is an alpha. Other records not beginning with a name may also contain initials but these must not be touched.
so like example: Smith, Robin John G H C, bla, bla...
Thompson, Ian P, bla, bla..
I can limit initial matches with the following regex:
If the maximum number of initials is small you might try matching up to that number of them and using conditional expressions in the replacement, but I seriously wouldn't recommend it.
Otherwise, there is no way I know of to do what you want in a single application of a repeated replacement because, as you say, once each replacement is made the cursor is moved to the end of what was matched, and the preceding context is lost.
The data are too varied for the option of conditional expressions, as far as I could construct. Initials may not be all together in one spot, and include compound abbreviations.
I can repeat my replace-all say 3-4 times inside a macro, it may take a fraction longer to run.
But conditional expressions look quite interesting, and I must practice them for other situations.
I'm surprised this works for you in the first place, neither distinguishing between upper and lowercase, nor disallowing non-letters. And not thinking about edge cases. It should also match the bold parts of these examples: