Java RegEx: разделение без потери токена - PullRequest
3 голосов
/ 19 марта 2011

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

Пример:

"x -y".split(regex)
returns: String[]{"x","-y"};

В настоящее время яиспользуя

(?<=\\s)-(?=\\S+)

для моего регулярного выражения;но это возвращает «х», «у» и съедает отрицательный знак.Есть ли способ не есть отрицательный знак?

Спасибо!

Ответы [ 4 ]

3 голосов
/ 19 марта 2011

Вы можете включить минус во вторую группу

\\s(?=-\\S+)

Это дает желаемый результат.

2 голосов
/ 19 марта 2011

Шаблон:

\s(?=\-\S)

Пример "

 String:  x -y z -x y z
Matches:   ^    ^

Каретки указывают на совпадения

Демо-версия:

Пример кода

2 голосов
/ 19 марта 2011

Вы захватываете знак минус, который используется для разделения.Поэтому оно удалено.

Два возможных решения:

а) добавить его ко второму совпадению, потому что оно должно быть там, иначе разделение не вернет этот результат б) вместо этого попробуйте (\S*) (\S.*) и сделайте совпадение,Это вернет два результата, "x" и "-y".

Если функция разбиения такая простая, рассмотрите возможность использования функции разбиения строки.Это намного быстрее, чем регулярное выражение.

var result = "x -y".split(" -");
if (result.length == 2) result[1] = "-" + result[1];

http://gskinner.com/RegExr/ это хороший сайт для проверки ваших регулярных выражений.Если вы сравните свое регулярное выражение с Говардсом, вы увидите разницу.Если ты возьмешь мой и тоже подойдешь.

0 голосов
/ 19 марта 2011

Если между значениями, которые вы хотите разделить, всегда будет пробел, попробуйте что-то вроде:

"x -y" .split ("-");

Просто не забудьте поставить - обратно (если это требуется).

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