Чтобы сопоставить любую пару чисел точками или запятыми и крестиком в середине, вы можете сделать что-то вроде этого:
(\d*(?:[.,]\d+)* x \d*(?:[.,]\d+)*)
или для пар и троек:
(\d*(?:[.,]\d+)*(?: x \d*(?:[.,]\d+)*){1,2})
так, может быть, это ваше выражение:
((?:\d*(?:[.,]\d+)*(?: x \d*(?:[.,]\d+)*){1,2})|\s|\w+)
Смотрите здесь: http://rubular.com/r/snAiI7GMT7 - отличный сайт для тестирования.
Возможно, вы захотите заменить \w
на \p{L}
, чтобы охватить все слова Юникода в Java.