If you want to restrict this so it doesn't find parts of strings with too many numbers, but you can accept anything else, then use #\d{6}(-\d{2})*(?=\D|$) The \D means "not a digit," | is the "or" and $ in this case means the end of story marker, so (?=\D|$) means find the number followed by anything at all that is not a digit, or by nothing at all (the end of story marker). Remember, this will also find the first part of #123456ABCD, not just your numbers followed by space or punctuation.
As mentioned above the pipes (|) is the or operator. There is no "and" operator other than defining the expression to have all of the criteria you need to match (which usually involves some sort of lookahead or lookbehind, or a scope or formatting limitation added in the search dialog.