Normally a regular expression find & replace is only applied once. Using the # lets you make it recursive.
In other words, after it is applied the first time to get a new filename it is then applied again to that result, and again and again until the filename stops changing (or until the specified number of repetitions is reached).
For example, create a new text file and call it
a1a2a3a4a5a6a7a8a9a.txt
Then go into the Rename dialog with that file selected and set the Type to Regular Expressions.
If you set the old name to ba(.)[/b] and the new name to \1\2 then you will remove just one of the 'a' characters from the filename. Opus could choose to remove any one of the 'a' characters but seems to consistently pick the last one (because the first (.) is "greedy" and will try to match as many characters as possible):
a1a2a3a4a5a6a7a8a9.txt
If you put a # on the end of the old name, so that it is ba(.*)#[/b] then all of the 'a' characters will be removed:
123456789.txt
If you instead put #3 on the end, so it's ba(.*)#3[/b] then three 'a' characters will be removed, because Opus will apply the expression three times:
a1a2a3a4a5a6a789.txt