Это должно охватывать все те случаи, в том числе случаи, когда вы получаете # вместо $
public Regex MyRegex = new Regex(
"^(\\()?[\\$#][0-9a-fA-F]+(,x)?(?(1)\\))[\\s]*$",
RegexOptions.Singleline
| RegexOptions.Compiled
);
Последовательность без экранирования для одной строки: ^(\()?[\$#][0-9a-fA-F]+(,x)?(?(1)\))[\s]*$
Тодолжен проверяться на соответствие каждой строке.
Кстати, я сделал это регулярное выражение довольно быстро, используя Expresso