Учитывая следующую строку:
11 bsszzz 0.5 te 11.43 432 -66 a x
Я хочу найти все целые числа. В данном случае: 11
, 432
и -66
Какое регулярное выражение я могу использовать для этого?
Я попробовал -?\d+
, но он вернет все числа, включая те, которые являются частью десятичных чисел.
Редактировать:
Ни одна из следующих повторяющихся целей не отвечает на вопрос:
11
, 432
и 66
, что не соответствует требованию.11
, 432
и 66
.На самом деле обе повторяющиеся цели дублируют друг друга, но ни одна из них не отвечает требованиям этого вопроса.
Вы можете использовать -?\\b(?<!\\.)\\d+(?!\\.)\\b
где
-?
указывает необязательный -
\b
указывает границу слова?<!
указывает отрицательный просмотр назад, а ?!
указывает отрицательный просмотр вперед.Демо:
import java.util.regex.MatchResult;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
class Main {
public static void main(String[] args) {
String str = "11 bsszzz 0.5 te 11.43 432 -66 a x";
System.out.println(Pattern.compile("-?\\b(?<!\\.)\\d+(?!\\.)\\b")
.matcher(str)
.results()
.map(MatchResult::group)
.collect(Collectors.toList()));
}
}
Выход:
[11, 432, -66]
@RyszardCzech - с регулярным выражением нет проблем, и оно отлично выполняет требование. Значение 20
в Nr.20
не соответствует требованию. Не вводите посетителей в заблуждение негативным комментарием, не задав ОП соответствующий вопрос. И делайте это под вопросом, а не под чьим-то ответом. Под вопросом были комментарии, которых больше нет. Я доверяю модераторам, которые могли удалить их по какой-то причине (чаще всего это конфликт или какие-то враждебные сообщения).
Заголовок: «Как я могу найти только целые числа с помощью регулярного выражения?» - -?\\b(?<!\\.)\\d+(?!\\.)\\b
не находит все только целые числа. Смотрите доказательство.
@RyszardCzech, в чем смысл вашего комментария, если это регулярное выражение решило мою проблему? Зачем вы добавляете новые условия, которые мне не нужны?
@RyszardCzech Nr.20
можно рассматривать как «Nr.», за которым следует 20
, или Nr
, за которым следует .20
. В последнем случае это явно десятичная дробь. Но, используя вашу логику, выражение не найдет 2213 правильно, потому что на самом деле это 22, за которыми следует 13, что является двумя целыми числами подряд. Поэтому при решении этого вопроса необходимо рассмотреть пример OP.
-?\\b(?<!\\.)\\d+(?!\\.)\\b
неверно, он не найдет целое значение20
, скажем, вNr.20
.