Как разбить строку на две части с помощью сводного числа? - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь разбить строку на две части с помощью регулярных выражений, но, очевидно, регулярное выражение является жадным, поэтому в первой группе оно добавляет немного больше.

Пример строки: «Этофраза 22ext "

Желаемый результат:

  • Группа 0 =" Это фраза "

  • Группа 1 =" 22"

  • " ex "не удаляется.

Я использую следующее регулярное выражение (в Java):

[^0-9]*([0-9]+).*

Он работает для группы 1, но в группе 0 он также включает "22ext".

Как мне избежать этого?

1 Ответ

0 голосов
/ 15 мая 2018

Ваше регулярное выражение не дает желаемого результата, потому что вы не добавили первую его часть в группу, поэтому у вас есть только одна группа в вашем регулярном выражении 1 . Вы можете исправить это, используя:

([^0-9]*)([0-9]+).*

И тогда вы можете найти две строки в «Группе 1» ​​и «Группе 2». Обратите внимание, что "Группа 0" - это полное совпадение .

Вот демоверсия .

Лучше и короче использовать следующее регулярное выражение:

(\D*)(\d+)

Соответствует любым нечисловым символам в первой группе (до тех пор, пока не достигнет первых числовых символов) , а затем соответствует следующим числовым символам , включая все цифры Unicode во второй группа.

И вы можете решить, включать или нет .* в конце.

Попробуйте онлайн .


Ссылки


1 "Группа 0" - это полное совпадение для всего шаблона, поэтому вам необходимо использовать "Группу 1" и "Группу 2".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...