Ваш критерий соответствия выглядит настолько широким, что будет соответствовать любой из следующих параметров:
foobar_
_
_part_00000000
______
Если это предусмотрено, вы также можете написать: regex = _(?:p(?:a(?:r(?:t(?:_\d*)?)?)?)?)?$
, что, возможно, не более элегантно. Если вы пропустите глушители, то вы можете написать: regex = _(p(a(r(t(_\d*)?)?)?)?)?$
, который на самом деле немного более читабелен, но чуть менее производителен.
Если вы хотите потерять полноту символов, то вы Можно также написать regex = _p?a?r?t?_?\d*$
, но тогда вы будете страдать от мысли, что следующее также будет работать:
Отредактировал вопрос согласно правильной подсказке Кэри Свовеланд.
Подсказка: страница regex101.com чрезвычайно полезна для изучения регулярных выражений и отладка их. java вкус не содержится, но в большинстве случаев pcre достаточно близок.