There were some extra spaces in what @dunhill posted. And that first quote probably should have been a question mark. I think what he meant was:
Code:
(?P<publisher>.+?) - (?P<author>[^_]+?) - (?P<title>.+)
And the question mark after the plus is to make the matching non-greedy.
To get the comment as well:
Code:
(?P<publisher>.+?) - (?P<author>[^_]+?) - (?P<title>.+?) - (?P<comments>.+)
I haven't tested that in calibre. I did check it using
https://regex101.com/.