РЕДАКТИРОВАТЬ: отредактированный вопрос настолько отличается, мой оригинальный ответ не применяется вообще. Для справки, на мой взгляд, то, что вы делаете , является идеальным способом решения вашей проблемы. Ваш разделитель - это граница нулевой ширины между цифрой и не цифрой, и нет более краткого способа выразить это, чем то, что вы опубликовали.
РЕДАКТИРОВАТЬ 2: (В ответ на вопрос, заданный в комментарии.) Вы первоначально попросили альтернативу этому регулярному выражению:
"((?<=\\w)(?=[^\\w])|(?<=[^\\w])(?=\\w))"
Почти точно так же работает \b
, слово-граничная конструкция:
"(?<=\\w)(?!\\w)|(?<!\\w)(?=\\w)"
То есть позиция, которой предшествует символ слова и за которым не следует один или за ним следует символ слова, а перед ним не следует. Разница в том, что \b
может совпадать в начале и в конце ввода. Вы, очевидно, не хотели этого, поэтому я добавил обходные пути, чтобы исключить эти условия:
"(?!^)\\b(?!$)"
Это просто более краткий способ сделать то, что сделал ваш регулярный оператор. Но затем вы изменили требование на соответствие границ цифр / не цифр, и для этого нет сокращения, например \b
для границ слова / не слова.