Простое добавление #?
перед границей не позволит регулярному выражению соответствовать # id-1321952010.xml, потому что он будет искать начало строки (^
) после того, как вы объявили, что может быть хэш перед ним, что является противоречивым правилом.
Для этого переместить разделитель начала строки в начало регулярного выражения за пределами ограниченного слова :
^#?\\b[a-zA-Z]+\\-[0-9]{10,10}\\.[xml]{3,3}\\b$
(также переместил разделитель конца строки за пределы слова, ограниченного для хорошей меры)
Кроме того,
Исходя из комментария @ Mat, если вы сопоставляете начало и конец строки, вам, вероятно, вообще не нужны границы слова, поскольку они становятся избыточными.
^#?[a-zA-Z]+\\-[0-9]{10,10}\\.[xml]{3,3}$